使用多个键值存储

时间:2010-11-13 04:06:00

标签: ruby-on-rails mongodb key tokyo-cabinet

我正在使用Ruby on Rails,并且我想知道是否适合使用某种Key Value Store而不是MySQL。我的用户有很多列表,每个列表都有很多单词。有些列表有数百个单词,我希望用户能够复制列表。这是一个繁重的MySQL任务b / c它将不得不一次创建这些数百个单词对象。

作为替代方案,我正在考虑使用某种键值存储,其中键只是单词。单词列表可以存储在mysql的文本字段中。每个列表可能是一个新的键值db?看起来以这种方式复制键值db会更快,而不必通过数据库。看起来这似乎也可能更快。想法?

1 个答案:

答案 0 :(得分:1)

使用关系数据库解决此问题的一般方法是使用列表,单词表和与这两者相关的表单词表。你是正确的,会有一些开销,但不要高估它;因为定义了表结构,所以每条记录的实际存储开销非常小,并且可以非常快速地插入记录。

如果您想要非常快的副本,您可以允许列表被复制。这意味着单个列表可以由多个用户引用,或者由同一用户多次引用。当用户尝试添加,删除或更改条目时,您实际上只复制了列表。当然,这是过早优化,开始简单,只有在你发现它们是必要的时候才会增加这样的复杂性。

您可以按照建议使用键值存储。我会避免尝试在MySQL文本字段之上构建一个,因为你有一个很好的理由,它会使得任何类型的按键搜索非常慢,因为它需要字符串搜索。像CouchDB或Tokyo Cabinet这样的键值数据存储可以做得很好,但它很可能会占用更多空间(因为每个记录必须定义自己的结构,并且每个单词必须在每个列表中单独记录)。如果您需要大规模可扩展的读写操作,我认为性能的唯一维度就是更好,但这只与最大的系统相关。

我会天真地使用MySQL,只有在需要性能时才进行更改,并且可以证明此方法实际上会更快。