mysql データベース内のテーブルには 2 つの列があります。最初の列にはフィンガープリントが含まれ、2 番目の列にはそのフィンガープリントを持つドキュメントのリストが含まれます。これは、検索エンジンによって作成された逆索引によく似ています。テーブル内のレコードのインスタンスを以下に示します。
34 "doc1, doc2, doc45"
フィンガープリントの数は非常に多い (数兆に及ぶ可能性がある)。データベースには基本的に次の操作があります: レコードの挿入/更新 & 指紋の一致によるレコードの取得。テーブル定義の Python スニペットは次のとおりです。
self.cursor.execute("CREATE TABLE IF NOT EXISTS `fingerprint` (fp BIGINT, documents TEXT)")
挿入/更新操作のスニペットは次のとおりです。
if self.cursor.execute("UPDATE `fingerprint` SET documents=CONCAT(documents,%s) WHERE fp=%s",(","+newDocId, thisFP))== 0L:
self.cursor.execute("INSERT INTO `fingerprint` VALUES (%s, %s)", (thisFP,newDocId))
これまでに観察した唯一のボトルネックは、mysql でのクエリ時間です。私のアプリケーション全体は Web ベースです。したがって、時間は重要な要素です。カサンドラの使用も考えましたが、知識があまりありません。この問題に取り組むためのより良い方法を教えてください。