0

互いに関連するいくつかの特定のデータセットがあります。それらを列に格納する必要があります。

ストア配列またはコレクションの列ファミリーを作成するにはどうすればよいですか? ありがとう!

4

2 に答える 2

1

リスト要素ごとに列を作成しないのはなぜですか?

たとえば、配列 = [a、b、c、d]

col name   col value
---------------------
array:0  | a
array:1  | b
array:2  | c
array:3  | d
于 2012-11-11T01:47:04.030 に答える
1

カサンドラにPlayOrmを使用している場合は、

 @NoSqlEmbedded
 private List<String> stuff;

そしてそれはあなたのためにそれをします。

自分で行う場合は、バイトに変換して保存するだけです。ただし、注意してください。サーバー1とサーバー2が値a、b、cを読み取り、サーバー1がdを追加し、サーバー2がeを追加するような状況があります。PlayOrm が行うことを行わず、両方のサーバーが返信すると、a、b、c、d または a、b、c、e になります。PlayOrm で上記を使用すると、両方のサーバーが書き戻すと、a、b、c、d、e になります。

PlayOrm と同じことをしたい場合は、各要素を独自の列に格納する方が賢明なので、書き込みは独立しており、互いに吹き飛ばされませんが、それで問題ないでしょうか?

編集: PlayOrm は a、b、c、d のリストを取得し、それを Set のように扱うため、すべてが一意になります。ここで、PlayOrm を使用する 2 つのサーバーが書き込みを行うとします。

1 つのサーバーが、stuff:a=null、stuff:b=null、stuff:c=null を書き出します。

2 番目のサーバーは、stuff:a=null、stuff:b=null、stuff:d=null を書き出します。

上記を読み返すと、a、b、c、d になります。これを行って ONE 列に書き込んだ場合、最後のサーバーが勝ちますが、この戦略では結果がマージされます。これは複合列名と呼ばれ、値フィールドではなく列名に値を格納します。

興味があればもっと詳しく..... PlayOrmでは、次のようなエンティティを作成できます

 @NoSqlEntity
 public class Entity {
    @NoSqlId
    private String id;
    @NoSqlEmbedded
    private List<String> stuff = new ArrayList<String>();
 }

そして、あなたはそれをそのように保存することができます

 NoSqlEntityManager mgr = ...
 mgr.put(someEntity);
 mgr.put(otherEntity);
 mgr.flush();  //here it is all actually written together

コードのいずれかに例外がある場合、どれも書かれていないため、nosqlストアのデータ破損からもう少し保護されるため、フラッシュも便利です。

したがって、PlayOrm は基本的にエンティティのすべてのインスタンスを noSql ストアの行に変換します。ここでplayorm機能リストを確認できます

https://github.com/deanhiller/playorm#playorm-feature-list

基本的に、JPA にない多くの新しい noSql パターンを利用するため、実際には JPA ではありません。

于 2012-11-10T20:49:31.983 に答える