私は、通常30文字を超える長さの数百万の文字列(ヌクレオチド塩基、AGCTによって形成される)を生成する生物学ソフトウェアに取り組んでいます。それはCと書かれました。
このデータをディスクに保存するのに十分な速度でデータベースが必要です。これにより、ソフトウェア全体の速度が低下するボトルネックが発生せず、RAMを過度に消費することもありません。さらに、アプリケーション内で完全にリンクする必要があります。ユーザーにSQLサーバーなどを強制的にインストールさせたくありません。
私はすでにhamsterDB、SQLite、Kyoto Cabinet、MapDBを試しましたが成功しませんでした。問題は、データベースから少なくとも5万回/秒でデータを挿入または更新する必要があることです。いくつかの最適化により、SQLiteがより高速になりました。18k操作/秒に達します(同期オフ、journal_modeオフ、トランザクション、ignore_check_constraintsオン、500.000のcache_size、およびプリコンパイルされたステートメントを使用します)。
各シーケンスはAまたはBに分類され、それぞれの種類がいくつあるかを知る必要があります。現在、シーケンスをキーとして使用し、Aタイプ用のカウンターとBタイプ用のカウンターを追加しています。SQLiteデータベースでは、次のような列とコマンドを使用しています。
INSERT OR REPLACE INTO events (main_seq,qnt_A,qnt_B) VALUES (@SEQ,COALESCE((SELECT qnt_A FROM events WHERE main_seq=@SEQ)+1,1),(SELECT qnt_B FROM events WHERE main_seq=@SEQ))
これは単純なINSERTINTOよりも低速ですが、seqがDBにすでに存在する場合は、列の1つをインクリメントする必要があります。
京都内閣で私は本当に高速になりましたが、それは文字列レコードしかサポートしておらず、整数を追加および更新して、AとBの数を数える必要があります。
レコードの書き込み速度と柔軟性に関する私のニーズを満たす可能性のある別の優れたDBを知っている人はいますか?