1

トランザクションサポートのためにMysqlinnodbテーブルと組み合わせてSphinxRTインデックスを使用することは可能ですか?

たとえば、mysqlにテーブル製品があり、全文検索用にSphinxでリアルタイムインデックスを作成しています。製品行がmysqlで更新されている場合、更新製品ですぐに全文検索を行うために、Sphinxのインデックスもリアルタイムで更新する必要がありますが、すべて一貫性があります。

製品行の更新が失敗した場合、またはリアルタイムのインデックス更新が失敗した場合は、不整合を回避するためにすべてをロールバックする必要があります。可能です?どうすればこれを入手できますか?

4

2 に答える 2

1

はい、可能ですが、いくつかの癖があります。Sphinxはトランザクション(begin / statement /(commit、rollback))をサポートしていますが、単一のリアルタイムインデックスに制限されています。つまり、1つのトランザクションで複数のインデックスに書き込みたい場合は、機能しません。次のmysqlテーブルとsphinxリアルタイムインデックスがあり、それらの間に直接の対応があるとします。

  posts_db      -> posts_rt
  comments_db   -> comments_rt

mysqlでは、1回のトランザクションで両方のテーブルに簡単に書き込むことができます。

START TRANSACTION;
    INSERT INTO posts_db ...;
    INSERT INTO comments_db ...;
COMMIT or ROLLBACK; // so far everthing ok

しかし、スフィンクスで同じことをしたい場合、それは失敗します:

START TRANSACTION;
    INSERT INTO posts_rt ...;
    // when executing the next statement you'll get an error
    INSERT INTO comments_rt ...;  // ERROR 1064 (42000): current txn is working with another index ('posts_rt')

sphinxでは、一度に1つのインデックスしか操作できません。

START TRANSACTION;
    INSERT INTO posts_rt ...;
COMMIT or ROLLBACK; // so far everthing ok

START TRANSACTION;
    INSERT INTO comments_db ...;
COMMIT or ROLLBACK; // so far everthing ok

そして、これは最悪です!!! シングルインデックスアプリケーションの場合は問題ありませんが、それ以外の場合は、phpまたは使用しているものを使用してトランザクションをエミュレートする必要があります。

于 2012-08-03T08:35:35.610 に答える
0

はい、可能です。リアルタイムインデックスの説明は次のとおりです http://sphinxsearch.com/docs/current.html#rt-indexes

于 2012-05-28T14:04:22.453 に答える