2013-06-04 42 views
5

Tôi có một ứng dụng C truyền dữ liệu đến một bảng bộ nhớ kdb cả ngày, cuối cùng phát triển nhanh kích thước của RAM máy chủ của tôi. Mục đích cuối cùng là lưu trữ dữ liệu trên đĩa, vì vậy tôi đã quyết định chạy chức năng phân vùng bộ đếm thời gian để truyền dữ liệu dần dần. Tôi đã đưa ra mã này:Làm thế nào để phân vùng chính xác một bảng trong thời gian thực trong kdb?

part_timer : { [] 
    (`$db) upsert .Q.en[`$sym_path] select [20000] ts,exch,ticker,side,price,qty,bid,ask from md; 
    delete from `md where i<20000 
} 

.z.ts: part_timer 
.z.zd: 17 2 6i 
\t 1000 

Đây có phải là cách chính xác để phân đoạn dữ liệu trực tuyến trong thời gian thực không? Làm thế nào bạn sẽ viết mã này? Tôi lo ngại về câu lệnh xóa không được đồng bộ hóa với lựa chọn.

Trả lời

3

Mặc dù không phải là giải pháp rõ ràng cho vấn đề của bạn. Hãy xem w.q here. Đây chỉ là viết thay thế cho RDB truyền thống. Điều này đệm lên các yêu cầu và mỗi bản ghi MAXROWS ghi dữ liệu vào đĩa.

1

Tại cuối ngày (tức là bạn không mong đợi những dữ liệu được nối), từ chương trình c của bạn, bạn có thể gọi:

Viết thư cho một vị trí cho 2013.01.01

.Q.dpft[`:/path/to/location;2013.01.01;`sym;`tableName]; 

rõ ràng bảng

delete from `tableName 

Rõ ràng một số bộ nhớ lên

.Q.gc peach til system"s" 

Tất nhiên, giả sử bạn có các cột thời gian/biểu tượng và bạn muốn phát theo ngày. Nếu không

`:/path/to/location/tableName/ set tableName 

Sẽ phát.

thể nối thêm còn nếu bạn muốn (xem IO chương của Q cho mortals cho ví dụ)

+0

Cảm ơn các cuộc gọi .Q, tôi sẽ thêm chúng vào tập lệnh của mình. Tôi không thể chờ đợi vào cuối ngày để lưu trữ dữ liệu, tôi giải thích trong câu hỏi rằng bảng bộ nhớ sẽ phát triển nhanh hơn RAM được cài đặt của chúng tôi, vì vậy tôi đang tìm cách lưu trữ vào đĩa dần dần. –

+0

Ah bỏ lỡ điều đó; trong trường hợp đó, nối thêm như trong w.q như ai đó đã nói –

+0

Có thể sử dụng .Q.dpft [] để nối thêm các hàng? Nghe có vẻ khó khăn đối với kdb. Nếu không, làm thế nào tôi có thể tổ chức lại db một cách hiệu quả vào cuối ngày để lưu trữ các biểu tượng tuần tự? –

2

Trong những nhận xét ở trên, bạn hỏi:

Nếu không, làm thế nào tôi có thể tổ chức lại db hiệu quả tại cuối ngày để lưu trữ các biểu tượng tuần tự?

Tôi biết câu trả lời này hơi chậm trễ, nhưng điều này có thể giúp người khác đang cố gắng làm điều tương tự.

Run sau đây để sắp xếp dữ liệu trên đĩa (Đây là chậm hơn so với kéo nó vào ram, phân loại và sau đó viết vào đĩa):

 par:.Q.par[PATH;.z.D;TABLE]; 
    par xasc `sym; 
    @[par;`sym;`p#]; 

đâu:

PATH: `:path/on/disk/to/db/root; 

Đối với tập tin duy nhất bảng:

TABLE: `tableName; 

Đối với các bảng xoè rộng:

TABLE: `$"tablename/" 
+0

Câu trả lời này không liên quan đến câu hỏi gốc. Vì các trường hợp như vậy thường bị xóa, vui lòng xem xét thêm một bản tóm tắt về điều này làm nhận xét. – dkar

Các vấn đề liên quan