我需要找到一种方法,使一组值始终生成相同的 ID,并且它必须是唯一的。
这样做的主要原因是为了加快查询速度,以前我需要进行大量连接,现在只需进行一次比较。我知道我的领域,遗憾的是这些值不是封闭的(即它们可以是任何东西)。
我尝试使用哈希,但根据定义,哈希函数不能保证唯一性。有办法吗?
编辑:更多上下文
我正在一个将来自不同设备组的事件关联起来的系统中工作。
相关性是通过一些事件属性计算的:
- 从哪里来。
- 这是什么类型的 Activity 。
- 来自它的值(value)观以及不同群体中同类事件的不同。
例如,想像这样的事情。想象一下我的设备是一台冰箱。它发送有关其内部温度和食物的事件。因此,假设我们按以下顺序接收事件:
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]}
温度
类型的所有事件都必须相关,但食物
类型的相关性也由其名称
和给出组
。即,相关标识符的数量是可变的。
这种相关性保存在这样的结构中
@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。
我有一个知识数据库,它知道从给定的事件中,某些属性是相关标识符。
有什么建议吗?
最佳答案
一种可能的解决方案是将您的值转换为字符串并使用某种保留的分隔符连接它们,确保保留顺序。该字符串将成为您的唯一 ID。
例如,值 1、“Bob”、7383.234、“{asdf}”和 2013-01-08 将具有以下唯一 ID:
"1|Bob|7383.234|{asdf}|2013-01-08"
这是一种memoization技术。
关于java - 如何从相同的值生成唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221634/