5

私は現在、別々のソースからのさまざまなデータを使用して大きなデータベース(200万行以上)を作成することを計画しています。レプリケーションとの同期の問題を防ぐために、auto_increment idを中心にデータベースを構築することは避けたいと思います。また、挿入される各アイテムには一意であることが保証されている英数字の製品コードが含まれるため、代わりにそれを使用する方が理にかなっているようです。

私は、このデータベースにインデックスを付けるための検索エンジンを探しています。Sphinxは、リレーショナルデータベースのインデックスを作成するように設計されているため、かなり魅力的に見えます。ただし、さまざまなチュートリアルやドキュメントを見ると、データベース設計が何らかの形でauto_incrementフィールドに依存していることがわかり、ドキュメントIDは32/64ビット整数のみである必要があるというかなり大胆なステートメントがあります。

IDとしてauto_incrementフィールドを使用せずにSphinxによってデータベースのインデックスを作成する方法はありますか?

4

4 に答える 4

17

もちろん、回避するのは簡単です。Sphinxのためだけに独自のIDを作成する必要があり、それらを衝突させたくない場合は、sphinx.conf(MySQLのサンプルコード)で次のようなことを行うことができます。

source products {

  # Use a variable to store a throwaway ID value
  sql_query_pre = SELECT @id := 0 

  # Keep incrementing the throwaway ID.
  # "code" is present twice because Sphinx does not full-text index attributes
  sql_query = SELECT @id := @id + 1, code AS code_attr, code, description FROM products

  # Return the code so that your app will know which records were matched
  # this will only work in Sphinx 0.9.10 and higher!
  sql_attr_string = code_attr  
}

唯一の問題は、検索で一致したレコードを知る方法がまだ必要なことです。Sphinxは、ID(現在は意味がありません)に加えて、「属性」としてマークした列を返します。

Sphinx 0.9.10以降では、文字列属性がサポートされているため、検索結果の一部として製品コードを返すことができます。

0.9.10はまだ公式リリースではありませんが、見栄えがします。ZawodnyがCraig'sListでそれを実行しているように見えるので、この機能に依存することにそれほど神経質になることはありません。

于 2009-10-30T14:37:56.377 に答える
3

sphinxは、IDが整数で一意である必要があるだけであり、自動インクリメントされるかどうかは関係ないため、独自のロジックを展開できます。たとえば、文字列キーの整数ハッシュを生成します。

于 2009-10-29T16:15:06.340 に答える
1

Sphinxは自動インクリメントに依存せず、一意の整数のドキュメントIDが必要です。たぶん、スフィンクスを操作するために、テーブルに代理の一意の整数IDを含めることができます。整数検索は英数字検索よりもはるかに高速であることが知られています。ところで、英数字の製品コードはどのくらいですか?サンプルはありますか?

于 2009-10-29T16:38:17.107 に答える
1

データからXMLストリームを生成することは可能だと思います。次に、ソフトウェア(Ruby、Java、PHP)を介してIDを作成します。

http://github.com/burke/mongosphinxを ご覧ください

于 2010-05-13T23:25:56.060 に答える