【问题标题】:UUID primary keys and MemcachedUUID 主键和 Memcached
【发布时间】:2010-10-03 01:17:47
【问题描述】:

现在缓存数据如此频繁,并且只有在有新数据时才访问数据库(然后缓存数据,哈哈),使用 Int 主键与 UUID 主键甚至存在真正的性能差异。

例如,假设我正在构建 NetFlix。新电影被添加到数据库中,电影列表和相关数据被放入缓存中。

用户搜索电影(由搜索服务器处理),然后找到一个列表,点击它,然后从缓存中检索数据。

在整个过程中,从不读取数据库。

你有什么想法?

【问题讨论】:

    标签: database memcached uuid


    【解决方案1】:

    我是类似于 Netflix 的主要网站的架构师,您在很大程度上是正确的,几乎所有非事务性数据都被缓存,因此优化数据库并不总是奏效。我们所有的电影标题都通过重复任务预加载到 memcached 中,因此对于系统的库部分,数据库永远不会被实际客户访问。

    不过,我们在设计数据库结构和查询时并没有懈怠,因为我们希望预加载器尽可能快速高效地运行。

    【讨论】:

    • 嗨,克里斯,有什么办法可以联系到你。我对您的电影流媒体服务感兴趣。
    【解决方案2】:

    我喜欢使用 UUID(实际上是GuidCombs)作为主键。确实,它确实使指标膨胀了一些,但是到处都是 64 位 RDBMS,而且内存非常便宜,我认为优点远远超过缺点。不必等到你插入后才知道你的 PK 是我最喜欢的。

    【讨论】:

      【解决方案3】:

      我支持 Chris 的回答,但我也想指出,如果尝试一次将很多键加载到内存中,那么您将使用大量内存。

      比较:

      6ba7b810-9dad-11d1-80b4-00c04fd430c8 - 37 个字节,如果 \0 终止则为 38 个字节

      64 位整数只有 8 个字节。并且可能可以存储在单个寄存器中。

      将此提升到一个新的水平。

      假设您想将 100,000 个 ID 加载到 ram 中。

      这将是 800,000 字节(64 位整数)或 3,800,000 字节!

      更新:2010 年 10 月 8 日。

      另外,验证 UUID 字符串有点困难,您必须使用正则表达式。

      但是,验证整数很简单。 intval() php,或 .to_i ruby​​,以及 int() for perl。

      这提高了其他人向您发送可疑数据(网络机器人)的安全性

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-29
        • 2021-10-21
        • 1970-01-01
        • 2015-07-04
        • 1970-01-01
        • 2021-11-12
        • 2013-01-29
        相关资源
        最近更新 更多