2

私は Cassandra を使用して SQL から NoSQL に移行しています。

Cassandra ですべてを実行するには、本当に SQL が必要ですか?を読みました。. それはSQLの選択、結合、グループ化、および順序付けについて語っていますが、SQLデータベースの「ID」の概念については何もありません。SQL では、すべての値に一意の識別子があります。

nosql/cassandraでそのようなものはありますか? 何?newId = lastId + 1Cassandra でそのようなことをするのは安全ですか?どのようにしますか?

ありがとう。

4

2 に答える 2

1

IDはCassandraには存在しません。これは、独自のドキュメントID(キーと呼ばれる)を提供するために必要な単純なキー/値ストアです。推奨されるアプローチは、キーの競合を回避するように設計されたUUIDを使用することです。

のようなことをすることnewId = lastId + 1はまったく安全ではありません。Cassandraは、設計上、トランザクションをサポートしておらず、読み取りと書き込みをアトミックにする方法もありません。並行トランザクションはこれを失敗させる可能性があります:

  • プロセスAは10を読み取ります
  • プロセスBは10を読み取ります
  • プロセスAは10+1=11を書き込みます
  • プロセスBは10+1 = 11 ...おっと、これは12になります。

興味があれば、CassandraCountersがこの問題に対処します。

于 2012-05-27T08:37:29.447 に答える
0

SQL から noSQL に移行する場合、考慮すべきもう 1 つのオプションは playOrm です。

Scalable JQL をそのように実行します (パーティションの追加に注意してください。それ以外は、SQL は同じです)。

@NoSqlQuery(name="findJoinOnNullPartition", query="PARTITIONS p(:partId) select p FROM TABLE as p INNER JOIN p.security as s where s.securityType = :type and p.numShares = :shares"),

また、一意のクラスターキーも生成されるため、常にキー生成を処理する必要はありません;)。playOrm のキー生成の例はここにあります (これは 1 つのクラスター内で一意です)...

https://github.com/deanhiller/playorm/blob/master/input/javasrc/com/alvazan/orm/api/base/spi/UniqueKeyGenerator.java

于 2012-09-05T12:22:13.250 に答える