0

我正在使用 Ruby on Rails 并且有一种情况,我想知道是否适合使用某种键值存储而不是 MySQL。我的用户有多个列表,每个列表都有多个单词。有些列表有数百个单词,我希望用户能够复制列表。这是一项繁重的 MySQL 任务 b/c 它必须一次创建这数百个单词对象。

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

4

1 回答 1

1

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

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

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

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

于 2010-11-13T04:28:30.927 回答