将大型json字符串存储到数据库+哈希

时间:2012-08-27 21:36:05

标签: php mysql caching

我需要在我的数据库中存储大型(30K未压缩)JSON字符串。我使用gzip压缩字符串,因此使用MySQL的BLOB数据类型来存储它。但是,只有5%的请求包含唯一数据,并且只需要将唯一数据存储在数据库中。

我的方法如下。

  1. array_multisort数据(数组[a, b, c][a, c, b]几乎相同)。
  2. json_encode数据(json_encodeserialize快;我们需要字符串数组表示步骤 3 。)
  3. sha1数据(慢于md5,但碰撞可能性较小)。
  4. 检查数据库中是否存在哈希。
    • 存在:请勿插入数据。
    • 新:gzip数据并将其存储在哈希值中。
  5. 除了将JSON数据存储到数据库之外,还有什么相关的东西听起来很腥或者应该以不同的方式完成吗?

    数据库每月创建大约1kk的唯一记录。

1 个答案:

答案 0 :(得分:0)

在我看来,你正在做的是某种L2 /持久/分布式缓存。

整个过程非常正确,但您应该考虑使用适合您环境的哈希算法,以获得最佳性能。

虽然MD5有128位,但SHA-1有160位。差别很大!虽然MD5可能有2 ^ 128(~3.4x10 ^ 38),但SHA-1可能有2 ^ 160(~1.4x10 ^ 48)。您认为使用MD5会发生冲突吗?

最佳案例场景中,假设每月有100万条唯一记录(10 ^ 6),您需要大约3.4x10 ^ 32个月才能发生碰撞。当然这些是理论值,即使MD5在2 ^ 128上没有均匀分布。

此外,如果您认为应丢弃旧值(如LRU算法),因为它们不再存储相关,您甚至可以使用更简单,更快速的哈希算法。

如果无论如何,性能和/或存储容量都不是问题,坚持使用SHA-1,持续时间更长,碰撞机会更少。

干杯!