一連の値が常に同じ ID を生成し、一意である必要がある方法を見つける必要があります。
これの主な理由は、以前は多くの結合を行う必要があったクエリを 1 回の比較だけに高速化することです。私は自分のドメインを知っていますが、悲しいことに値は閉じられていません (つまり、値は何でもかまいません)。
ハッシュで試してみましたが、定義上、ハッシュ関数は一意性を保証しません。方法はありますか?
編集: いくつかのより多くのコンテキスト
私は、さまざまなデバイス セットからのイベントを関連付けるシステムで作業しています。
相関関係は、いくつかのイベント属性を通じて計算されます。
- どこから来たのか。
- どのようなイベントですか。
- そこから派生し、異なるグループの同じ種類のイベントとは異なる値。
例えば、こんなことを考えてみてください。私のデバイスが冷蔵庫だと想像してください。内部の温度と食べ物に関するイベントを送信します。したがって、次の順序でイベントを受け取ると想像してください。
Event1: {type: temperature, values: [{temperature: -1]}
Event2: {type: food, values: [{group: vegetable, name: brocollis, quantity: 2, weight: 0.1]}
Event3: {type: food, values: [{group: vegetable, name: lettuce, quantity: 1, weight: 0.1]}
Event4: {type: temperature, values: [{temperature: -5]}
タイプのすべてのイベントはtemperature
相関する必要がありますが、タイプfood
の相関はそのname
およびからも与えられgroup
ます。すなわち、相関識別子の数は可変である。
この相関関係は、このような構造に保存されます
@Entity
public class EventCorrelation {
@Id @GeneratedValue
@Audit
private Long id;
@ElementCollection
@CollectionTable(
name = "evt_corr_extra_id",
joinColumns = @JoinColumn(name = "correlation_id"))
@Column(name = "extra_id")
@LazyCollection(LazyCollectionOption.TRUE)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Collection<String> identifiers;
// getters/setters
}
相関関係を識別する値を保存するのは、identifiers 配列内です。イベント相関を検索するクエリを高速化したいのですが、最初のアイデアは、相関から一意の ID を作成することでしたidentifiers
。
特定のイベントから、特定の属性が相関識別子であることを認識しているナレッジ データベースがあります。
任意のヒント?