互いに関連するいくつかの特定のデータセットがあります。それらを列に格納する必要があります。
ストア配列またはコレクションの列ファミリーを作成するにはどうすればよいですか? ありがとう!
互いに関連するいくつかの特定のデータセットがあります。それらを列に格納する必要があります。
ストア配列またはコレクションの列ファミリーを作成するにはどうすればよいですか? ありがとう!
リスト要素ごとに列を作成しないのはなぜですか?
たとえば、配列 = [a、b、c、d]
col name col value
---------------------
array:0 | a
array:1 | b
array:2 | c
array:3 | d
カサンドラに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 ではありません。