大家好,我有一个很大的数据集,我正在上传到Elastic Search。
Elastic需要一个唯一的ID来上传条目,而我正在使用.GetHashCode()在lambda / linq语句中实现此目的。
var fullList = js.Select(x => "{\"create\": {\"_index\":\"" + elasticType + "\",\"_type\" :\"" + elasticType + "\", \"_id\" :\"" + x.GetHashCode() + "\"}}
我面临的问题是GetHashCode()为某些数据行产生相同的值。
通过在行上附加行号,确保每行的数据都不相同,因此每行都是唯一的。但是哈希有时会冲突。
是否存在1)更好的哈希码功能和2)将其合并到上述代码中的方法。还是需要用更冗长的循环替换lambda?
预先感谢
答案 0 :(得分:1)
1)更好的哈希码功能
不,这很明显。称为the birthday paradox,它表示,如果有足够的值放入有限数量的存储桶(即散列)中,则始终会有重复项。
如果需要唯一标识符,请使用唯一标识符。哈希不是那个,neither are GUIDs。使用行索引(如果有的话),它对于数据集是唯一的,并且Select
可以在迭代时将其返回给您。