【发布时间】:2019-01-22 13:48:02
【问题描述】:
我希望维护一个从第三方收集数据的 (Postgres) SQL 数据库。由于大多数数据是静态的,虽然我每天都会得到完整的转储,但我只想存储新数据。即,每天我都会获得 100K 条新记录,比如 300 列,而 95K 行将是相同的。为了以一种有效的方式这样做,我正在考虑在数据旁边插入我的记录的哈希(来自 Pandas 数据帧或 Python 字典)。还存储了一些其他数据,例如将其加载到数据库中时。然后我可以在向数据库中插入数据之前,对传入的数据进行哈希处理并轻松验证该记录尚未在数据库中,而不必检查所有 300 列。
我的问题:选择哪个哈希函数(鉴于我在 Python 中并且更喜欢使用非常快速且可靠的解决方案,该解决方案只需要我这边的少量编码,同时能够处理各种数据,如整数、浮点数、字符串、日期时间等)
Python 的
hash不适合,因为它会随每个会话而变化(例如:Create hash value for each row of data with selected columns in dataframe in python pandas)md5或sha1是加密哈希。我不需要加密部分,因为这不是为了安全。可能也有点慢,而且我在使用字符串时遇到了一些麻烦,因为它们需要编码。- 像
CRC这样的解决方案是否足够好?
对于二和三,如果您推荐,我如何为任意 dicts 和 pandas 行实现它?我在保持这种简单性方面收效甚微。例如,对于字符串,我需要明确定义编码,并且记录中字段的顺序也不应该改变哈希。
编辑:我刚刚意识到,为此依赖 Python 可能会很棘手,如果我更改编程语言,我最终可能会得到不同的哈希值。将其绑定到数据库似乎是更明智的选择。
【问题讨论】: