【发布时间】:2012-08-27 17:28:30
【问题描述】:
我正在开发一个包含各种语言的词典网站,我可以将这种语言的每个人翻译成其他所有语言,我目前正在使用 mySQL,如果我想将英语翻译成中文,例如,我有一个表“en_ch”包含所有带有翻译的单词,每个表大约有 90.000 - 150.000 个条目。所以 mySQL 相当慢,而且也很难映射所有属性,一个翻译可以有元信息,例如欧罗巴可能意味着大陆或木星的月亮,所以我有一个类型标签,可以是“地理”' astro' 'med' 等......用户也可以评价翻译的好坏,一种语言的一个词可以有另一种语言的多个翻译,或者可能只有一个,如果我使用数据库规范化,事情变得真的如果我查询元信息会很慢。
所以我认为使用 NoSQL 数据库可能比 RDBMS 有一些好处。 问题是.. 我对 NoSQL 不太了解,我以前从未使用过它,所以我在这里询问我正在做的事情是否有某种最佳实践,或者这是否是一个好主意。
如果我使用 mongoDB,我会为每个翻译创建一个文档(/english -> German / German -> chinese / ..)并将每个翻译保存为一个列表,其中键是第一种语言,值是翻译,我也认为可以像上面提到的那样赋予每个值属性(对吗?)
这是最好的方法吗?
查询会比在 mySQL 中更快吗?
【问题讨论】:
-
我感觉实际问题与您的 MySQL 模型和索引策略有关。您愿意发布您的数据库架构吗?
-
90-150K 条目对于 MySQL 数据库来说是非常温和的。它可以通过正确的索引和架构轻松处理数百万个条目。
-
实际上..我宁愿不这样做 :D 我仍在研究 mySQL 模型,有些事情我不知道如何实现它们:每个翻译都可以有一个评分(好-坏),每个单词可以有一个或多个标签,例如 [med.][Geo] / [Noun] /[verb]...,不同的写作风格(例如繁体中文/简体中文),发音(虽然我不需要发音在每种语言中)一个音频文件,一个或几个例句,以及在不同语言中具有相同含义的所有单词都可以有一张图片,我认为在 NoSQL 中映射可能会更容易......
-
+1 请求如何设置索引。 MySQL 应该很容易处理 150k 行的表。对您的查询运行
EXPLAIN以查看是否正在使用索引。关于 NoSQL,如果您在使用 MySQL 时发现自己有很多具有 NULL 值的字段,那么 MongoDB 可以从数据建模的角度提供帮助,但是您仍然需要设置正确的索引才能以与 MySQL 完全相同的方式获得良好的性能。
标签: php mysql mongodb database