UUID主键和Memcached

时间:2010-10-03 01:17:47

标签: database memcached uuid

现在经常缓存数据并且只有在有新数据时才访问数据库(然后该数据被缓存lol)使用Int主键和UUID主键甚至存在真正的性能差异。

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

用户搜索电影(搜索服务器处理此事件),然后查找列表,点击它并从缓存中检索数据。

在整个过程中,永远不会读取数据库。

你有什么想法?

3 个答案:

答案 0 :(得分:1)

我是建筑师类似于Netflix的主要网站,并且您在大多数情况下都是正确的,几乎所有非交易数据都被缓存,因此优化数据库和恶心并不总是有回报。我们所有的电影标题都由一个重复的任务预先加载到memcached中,因此对于系统的库部分,数据库永远不会被实际的客户击中。

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

答案 1 :(得分:0)

我赞成将UUID(实际为GuidComb s)用于主键。确实,它确实膨胀了一些指标,但到处都是64位RDBMS且内存非常便宜,我认为其优点远大于缺点。不必等到你插入才知道你的PK将是我最喜欢的。

答案 2 :(得分:0)

我支持克里斯的回答,但我也想指出,如果尝试一次将大量的密钥加载到内存中,那么你将使用大量的内存。

比较:

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

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

将此提升到新的水平。

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

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

更新:2010年10月8日。

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

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

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