Q Language - Các bảng trên đĩa

Dữ liệu trên đĩa cứng của bạn (còn được gọi là cơ sở dữ liệu lịch sử) có thể được lưu ở ba định dạng khác nhau - Tệp phẳng, Bảng xếp chồng và Bảng phân vùng. Sau đây chúng ta sẽ học cách sử dụng ba định dạng này để lưu dữ liệu.

Tệp phẳng

Các tệp phẳng được tải đầy đủ vào bộ nhớ, đó là lý do tại sao kích thước của chúng (diện tích bộ nhớ) phải nhỏ. Các bảng được lưu trên đĩa hoàn toàn trong một tệp (vì vậy kích thước rất quan trọng).

Các chức năng được sử dụng để thao tác các bảng này là set/get -

`:path_to_file/filename set tablename

Hãy lấy một ví dụ để chứng minh cách nó hoạt động -

q)tables `.
`s#`t`tab`tab1 

q)`:c:/q/w32/tab1_test set tab1
`:c:/q/w32/tab1_test

Trong môi trường Windows, các tệp phẳng được lưu tại vị trí - C:\q\w32

Lấy tệp phẳng từ đĩa của bạn (db lịch sử) và sử dụng get lệnh như sau:

q)tab2: get `:c:/q/w32/tab1_test

q)tab2

   sym    |   time           price   size
--------- | -------------------------------
  APPLE   | 11:16:39.779   8.388858   12
  MSFT    | 11:16:39.779   19.59907   10
  IBM     | 11:16:39.779   37.5638    1
 SAMSUNG  | 11:16:39.779   61.37452   90
  APPLE   | 11:16:39.779   52.94808   73

Một bảng mới được tạo tab2 với nội dung của nó được lưu trữ trong tab1_test tập tin.

Bảng xếp chồng

Nếu có quá nhiều cột trong một bảng, thì chúng tôi lưu trữ các bảng đó ở định dạng xếp chồng, tức là chúng tôi lưu chúng trên đĩa trong một thư mục. Bên trong thư mục, mỗi cột được lưu trong một tệp riêng biệt dưới tên giống như tên cột. Mỗi cột được lưu dưới dạng danh sách loại tương ứng trong tệp nhị phân kdb +.

Lưu một bảng ở định dạng có lớp phủ rất hữu ích khi chúng ta phải truy cập thường xuyên vào một vài cột trong số nhiều cột của nó. Thư mục bảng được xếp chồng chứa.d tệp nhị phân chứa thứ tự của các cột.

Giống như một tệp phẳng, một bảng có thể được lưu dưới dạng hiển thị bằng cách sử dụng setchỉ huy. Để lưu bảng dưới dạng hiển thị, đường dẫn tệp phải kết thúc bằng dấu gạch chéo ngược -

`:path_to_filename/filename/ set tablename

Để đọc một bảng có lớp phủ, chúng ta có thể sử dụng get chức năng -

tablename: get `:path_to_file/filename

Note - Để một bảng được lưu dưới dạng splayed, nó nên được bỏ khóa và liệt kê.

Trong môi trường Windows, cấu trúc tệp của bạn sẽ xuất hiện như sau:

Bảng phân vùng

Các bảng được phân vùng cung cấp một phương tiện hiệu quả để quản lý các bảng khổng lồ chứa khối lượng dữ liệu đáng kể. Bảng được phân vùng là các bảng được xếp chồng lên nhau trên nhiều phân vùng (thư mục) hơn.

Bên trong mỗi phân vùng, một bảng sẽ có thư mục riêng, với cấu trúc của một bảng được xếp chồng lên nhau. Các bảng có thể được chia theo ngày / tháng / năm để cung cấp quyền truy cập tối ưu vào nội dung của nó.

Để lấy nội dung của bảng được phân vùng, hãy sử dụng khối mã sau:

q)get `:c:/q/data/2000.01.13              // “get” command used, sample folder

quote| +`sym`time`bid`ask`bsize`asize`ex!(`p#`sym!0 0 0 0 0 0 0 0 0 0 0
0 0 0….

trade| +`sym`time`price`size`ex!(`p#`sym!0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 ….

Hãy thử lấy nội dung của một bảng giao dịch -

q)get `:c:/q/data/2000.01.13/trade

   sym    time            price     size    ex
--------------------------------------------------
    0   09:30:00.496    0.4092016    7      T
    0   09:30:00.501    1.428629     4      N
    0   09:30:00.707    0.5647834    6      T
    0   09:30:00.781    1.590509     5      T
    0   09:30:00.848    2.242627     3      A
    0   09:30:00.860    2.277041     8      T
    0   09:30:00.931    0.8044885    8      A
    0   09:30:01.197    1.344031     2      A
    0   09:30:01.337    1.875        3      A
    0   09:30:01.399    2.187723     7      A

Note - Chế độ phân vùng phù hợp với các bảng có hàng triệu bản ghi mỗi ngày (tức là dữ liệu chuỗi thời gian)

Sym tệp

Tệp sym là một tệp nhị phân kdb + chứa danh sách các ký hiệu từ tất cả các bảng được phân vùng và phân vùng. Nó có thể được đọc với,

get `:sym

tệp par.txt (tùy chọn)

Đây là một tệp cấu hình, được sử dụng khi các phân vùng được trải rộng trên một số thư mục / ổ đĩa và chứa các đường dẫn đến các phân vùng đĩa.