lmdbで、mdb_get()してキーが無かったらmdb_put()する、という処理にしていた。
それは動いていたのだが、ずっと動かしていると急に、mdb_get()→失敗してmdb_put()→成功→同じキーでmdb_get()→失敗、という動作をするようになってしまった。
今まで動いていたので、APIの使い方を間違っているとか、lmdbの仕様を確認してなかったとかだろうと思ったのだが、どうにもわからない。。。
あれこれ考えていると、mdb_txn_commit()も戻り値があることに気付いた。
いや、commitで失敗してもやれることがないだろうと思って、チェックしていなかったのだ。
そうすると、一覧にないエラーが起きていた。
見ていくと、mdb_env_set_mapsize()にたどり着いた。
えー、これってmdb_put()で返すように書いてあるけど、mdb_txn_commit()のタイミングで返すの。。。
まあ、commitするまで反映しないということからすると、その方が自然なのか。。。
どうやら、mapsizeがDBに保存できるサイズの上限らしい。
たしかに今回は、初めて実動作させて大量のデータを保存させていたのだ。
DBって、ディスク容量に制限されるだけかと思っていたのだが、処理の都合でいろいろあるということがわかった。
SQLとか使うほどじゃないから軽いやつにしよう、くらいで選択してはよくないのかもしれんな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。