用于海量数据的多语言MySQL数据库结构

时间:2012-07-09 19:49:55

标签: mysql database localization

我正在寻找一些关于多语言MySQL数据库结构的建议,它可以处理大量数据。 我们目前正在使用以下方法:

Articles  <- Article_translations -> Languages
id           id                      id
date         language_id (fk)        locale
category     article_id  (fk)   
             content

好的,我们只能说我们有100.000篇文章和5种语言......好吧......你看到了问题。数据越大,数据库越慢(这里只是一个猜测,但绝对必要的复杂JOIN查询可能不会是O(log(n)),而是像O(n ^ 2))。

我们目前的解决方案是将Article_translations拆分为[locale] _article_translations(例如en_us_article_translation),在这种情况下,我们需要轻松地同步这些表之间的结构。这是解决这个问题的合适方法还是更好的方法?如果这是一个很好的解决方案,那么有什么东西可以帮助监控变化(只有结构,没有数据同步!)并同步这些结构?

2 个答案:

答案 0 :(得分:1)

你是对的,较大的数据较慢的数据库,但如果数据库没有一个好的设计,即使数据量很小,它也会很慢。

我不能告诉你什么是最好的方法或最好的解决方案,记住你需要做多件事才能找到“最佳解决方案”。我可以向您推荐一些可以帮助您的工具和一些提示。

首先,检查您的索引,索引类型,不仅PK和FK,您还需要查看您需要哪种类型的索引,I.E,您需要文本索引吗?或hashtree ??

还检查您的引擎,MyISAM或InnoDB?。你说你拆分了表,检查this post关于拆分的问题。

如果你避免发现问题,你的查询会更快like '%word%'记住错误的查询会对响应时间产生巨大影响。

您可以使用Show create table或D escribe select ......explain查看正在发生的事情,或使用命令benchmark查看您所使用的功能的大致时间申请改善

MySQL的一些工具我建议你看一下这个可以帮助你完成这部分性能的程序。

  • Mysqlslap(它就像基准测试,但您可以自定义更多结果)。

  • SysBench(测试CPU性能,I / O性能,互斥争用,内存速度,数据库性能)。

  • Mysqltuner(使用此功能,您可以分析常规统计信息,存储引擎统计信息,性能指标)。

  • mk-query-profiler(执行SQL语句分析)。

  • mysqldumpslow(很高兴知道女巫查询会导致问题)。

答案 1 :(得分:0)

假设您正确调整查询

  • 使用大量数据检查查询执行计划
  • 确保将数据库级参数用作“大集”而不是行级
  • 看看你是否使你的桌子非规范化(或反之亦然)。

我建议下面虽然我不确定您使用的是哪个版本的MySQL

  • 数据库级别的分区
  • 数据库服务器中的快速硬盘

我建议先使用分区,然后再考虑升级硬盘。

<强>分区

分区是数据库级别提供的数据分割。 根据您的查询用法,您可以根据案例中的语言划分数据。 使用数据库分区的好处是

  • 可以通过应用程序端的单个表来处理
  • 取决于数据量和频率,可以按数据库级别重新排列。对应用程序没有影响。

硬盘质量

硬盘质量对于处理大量数据也很重要。 即使查询最多被调整,如果您在单个查询中处理大量数据,也需要快速数据访问。但这很费劲。