5

私は一日中 kdb メモリテーブルにデータをストリーミングする C アプリケーションを持っており、最終的にはサーバー RAM のサイズを超えてしまいます。最終的にはデータをディスクに保存することが目標なので、タイマー パーティション関数を実行してデータを徐々に転送することにしました。私はこのコードを思いつきました:

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

これはリアルタイムでストリーミング データを分割する正しい方法ですか? このコードをどのように記述しますか? 削除ステートメントが選択と同期されていないことが心配です。

4

3 に答える 3

4

あなたの問題に対する明確な解決策ではありませんが。ここで wq を見てください。これは、従来の RDB に代わる書き込み専用です。これによりリクエストがバッファリングされ、すべての MAXROWS レコードがデータをディスクに書き込みます。

于 2013-06-04T14:28:41.207 に答える
2

上記のコメントで、あなたは尋ねました:

そうでない場合、1日の終わりにデータベースを効果的に再編成して、シンボルを順番に保存するにはどうすればよいですか?

この答えが少し遅れていることは知っていますが、これは同じことをしようとしている他の誰かを助けるかもしれません.

以下を実行して、ディスク上のデータを並べ替えます (これは、データを RAM に取り込み、並べ替えてからディスクに書き込むよりも遅くなります)。

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

どこ:

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

単一ファイル テーブルの場合:

    TABLE: `tableName;

拡張テーブルの場合:

    TABLE: `$"tablename/"
于 2013-07-25T21:28:28.010 に答える