我正在寻找一些关于多语言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),在这种情况下,我们需要轻松地同步这些表之间的结构。这是解决这个问题的合适方法还是更好的方法?如果这是一个很好的解决方案,那么有什么东西可以帮助监控变化(只有结构,没有数据同步!)并同步这些结构?
答案 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
我建议先使用分区,然后再考虑升级硬盘。
<强>分区强>
分区是数据库级别提供的数据分割。 根据您的查询用法,您可以根据案例中的语言划分数据。 使用数据库分区的好处是
硬盘质量
硬盘质量对于处理大量数据也很重要。 即使查询最多被调整,如果您在单个查询中处理大量数据,也需要快速数据访问。但这很费劲。