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.