2010-10-03 98 views
0

随着现在数据被高速缓存,数据库只有在有新数据时才被访问(然后数据被缓存了lol),使用Int主键与UUID甚至有真正的性能差异主键。UUID主键和Memcached

例如,让我们假设建立NetFlix。一部新电影被添加到数据库中,并且电影列表和相关数据将被放入缓存中。

用户搜索电影(搜索服务器处理此操作),然后找到列表,单击它并从缓存中检索数据。

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

你的想法是什么?

回答

1

我是一个类似于Netflix的主要站点的架构师,并且您在大多数情况下都是正确的,几乎所有非事务性数据都被缓存,因此优化数据库的广告并不总是有回报。我们所有的电影名称都是通过重复性任务预先加载到memcached中的,因此对于系统的库部分,数据库永远不会被实际的客户击中。

尽管如此,我们在设计数据库结构和查询时并不感到疲惫,因为我们希望预加载器尽可能快速和高效地运行。

+0

嘿克里斯,有什么方法可以让我与您联系。我对你的电影流媒体服务感兴趣。 – 2011-02-23 23:55:07

0

我赞成主键使用UUID(实际为GuidComb)。诚然,它确实有些瑕疵,但随着64位RDBMS无处不在,内存相当便宜,我认为这些优势远远超过了这些缺点。不需要等到你插入来知道你的PK将是我的最爱。

0

我支持克里斯的回答,但我也想指出,如果试图一次加载很多密钥到内存中,那么你会用很多内存。

比较:

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

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

把这个提升到下一个层次。

假设你想装入100,000个ID到RAM中。

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

更新:10月8日,2010年

此外,验证一个UUID字符串是有点难度,你必须使用正则表达式。

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

这提高了安全性相对于其他人发送您怀疑数据(网络机器人)