DocumentDBでマルチバイト検索を実現する場合の留意事項について
Amazon DocumentDBは使っていますか? Amazon DocumentDBはMongoDBの互換のドキュメント指向データベースであり、サービスの概要がわかるBlackBeltの資料は2019年のものが最新となっている。 MongoDBの互換となっているもののサポートされている MongoDB API、オペレーション、およびデータ型を見ると様々な面で機能差異があることがわかる。 特にマルチバイトを取り扱い場合においてはcollationに対応していないなどの問題があるため、検索要件が一致しているかどうかを検討する必要がある。 私が検証した中で、ドキュメントに記載がされていない部分において、マルチバイト検索においてインデックス適切に利用されず検索性能が大幅に低下する問題に遭遇したので、回避方法ともに紹介する。 今回の検証は、DocumentDB 4.0で行っているが、5.0でも事象が変わらない。 key に対して単一キーのインデックスを事前に作成する rs0 [direct: primary] db1> db.col.createIndex({scope:1, key: 1}) scope_1_key_1 その上で、半角文字で開始するコレクションを検索すると4133レコードの結果がある場合でも134 msと高速に応答する。 rs0:PRIMARY> db.col.find({ scope:"xxxxx", key: /^A/ }).hint({scope:1,key:1}).explain("executionStats"); { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "db1.col", "winningPlan"...