mysql - 海量数据的多语言MySQL数据库结构

标签 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),在这种情况下,我们需要轻松同步这些表之间的结构。这是解决此问题的合适方法还是有更好的方法?如果这是一个好的解决方案,是否有什么东西可以帮助监视更改(仅结构,没有数据同步!)并同步这些结构?

最佳答案

你只对了一半,数据越大数据库越慢,但如果数据库设计不好,即使是小数据也会很慢。

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

首先,检查你的索引,索引类型,不仅是PK和FK,你还需要看你需要哪种类型的索引,即,你需要文本索引吗?或哈希树??。

还要检查你的引擎,MyISAM 还是 InnoDB?你说你分表,查this post关于拆分。

此外,如果您避免使用'%word%'之类的东西,您的查询也会更快。请记住,错误的查询会对响应时间产生巨大影响。

您可以使用 Show create table 或 Describe select ......explain 来查看发生了什么,或使用命令 benchmark 查看您正在应用以改进它的函数的大概时间

一些用于 MySQL 的工具我会推荐您看一下这个程序,它将帮助您提高这部分性能。

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

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

  • Mysqltuner(您可以使用它分析一般统计信息、存储引擎统计信息、性能指标)。

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

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

关于mysql - 海量数据的多语言MySQL数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11402085/

相关文章:

ios - 如何用 %d 本地化 stringWithFormat?

用于批量传输的 MySqlDataAdapter 或 MySqlDataReader?

MySql 在内部联接中,哪个表先出现有关系吗?

mysql 在 yii2 中选择子查询

spring - 如何为 Spring 消息本地化启用外文字符?

html - 根据区域设置设置单个样式表

mysql - 在这种情况下,group_concat 如何使用类似 where 条件

sql - 历史/可审核的数据库

mysql - 在mysql/sql中查找条件满足x次的记录

php - PHP数组与数据库的性能