我需要找到一种方法,一组值将始终生成相同的 ID,并且它必须是唯一的。
这样做的主要原因是在我需要进行大量连接之前加快查询速度,只进行一次比较。我知道我的领域,遗憾的是这些价值观并没有封闭(即,它们可以是任何东西)。
我尝试使用散列,但根据定义,散列函数不能保证唯一性。有办法吗?
编辑:更多上下文
我正在一个与来自不同设备集的事件相关联的系统中工作。
相关性是通过一些事件属性计算的:
- 从哪里来。
- 这是一个什么样的事件。
- 来自它的价值观和不同群体中相同类型的事件不同。
例如,想想这样的事情。想象一下我的设备是一台冰箱。它发送有关内部温度和食物的事件。因此,假设我们按以下顺序接收事件:
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
}
在标识符数组中,我保存了标识相关性的值。我想加快搜索事件相关性的查询,我的第一个想法是从相关性中创建一个唯一的 id identifiers
。
我有一个知识数据库,它知道从给定事件中,某个属性是一个相关标识符。
有小费吗?