トランザクション機能は、$#$ rocksdb_transaction_t
rocksdb_t
の並列実装を介してrocksdbで公開されます。 bindgen(#143)ができたので、「無料」でアクセスできます。
まず、簡潔にするために、CRUDのRocksDBパラレルである新しい頭字語を提案します。これを私はそれと呼びます。
PIGMED、それはPut Iterate MErgeDeleteです。 キャッチーではない、私は知っています。
問題は、次の場合にトランザクション機能を最適に公開する方法です。
TxnDbには、ラップする必要のある新しいメソッドがかなりあります。それらのいくつかは、ガードまたはクロージャとしても意味がある場合があります。
型安全性や人間工学さえも維持しながら、DBとTxnDBのPIGMED操作を統合する方法はないと思います。 しかし、実際にはDBには大量のPIGMED機能はありません。
ユーティリティ/環境機能のすべて、つまりrocksdb_t
を必要としないものを別のユーティリティモジュールに移動することを提案します(たとえば、$#$ 4 $#$の場合は$# rocksdb::cf::create
rocksdb_create_cf
)。
次に、DBをPIGMED操作のみにスリム化します。
同じイテレータ機能を活用できるようになることを願っています。 rocksdb_transaction_create_iterator
がありますが、 iterator_t
は同じです。
考え?
これはしばらくの間そこにあったように見えます。 これに関する更新があるかどうかを確認するために私がすぐにドロップすると思っただけですか? トランザクションのため、一部のRustサービスにrocksdbの使用を延期しています。
これは#250で満足していますか?
そう思います。 マージされるのを楽しみにしています:)
@rrichardsonの以前のコメントを読み直しましたが、この問題はトランザクションRocksDBの「悲観的」バージョンを参照していると思いますが、#250は「楽観的」バージョンを追加しています。 #250の作業の多くを活用して、両方を着陸させることができるはずだと思います。
私は現在、#268でいくつかの内部再構築に取り組んでいます。これにより、多くのコードの重複なしにTransactionalDB
とOptimisticTransactionalDB
の両方を簡単に実装できるようになります。
TransactionalDB
ほぼ同等のDB
にするためのC APIに欠落しているメソッドがいくつかあります(facebook / rocksdb#4999を参照)。 この機能を導入する前に、これを解決する必要があります。
@hnakamurは、不足しているAPIを追加するためにfacebook / rocksdb#5077を送信しました。 リリースで利用可能になったら、ここRustバインディングでサポートを追加する作業を行います。
@iSynaptic
https://github.com/facebook/rocksdb/pull/5077はすでにマージされており、最新リリースバージョンでアップデートが表示されているのがわかりました。
現在のPRをもう一度見ていただけますか?
最も参考になるコメント
@hnakamurは、不足しているAPIを追加するためにfacebook / rocksdb#5077を送信しました。 リリースで利用可能になったら、ここRustバインディングでサポートを追加する作業を行います。