我正在使用mysql 5.0创建一个开源项目的数据库 它用于存储特定语言的句子及其他语言的翻译
我曾经有一个大表“句子”和“sentences_translations”(用于连接句子到句子)表但是我们现在有近百万个条目,这开始有点慢,而且,大多数请求都是使用“where lang =”
制作所以我决定用语言创建一个表 sentences_LANGUAGECODE
和sentences_translation_LANGSOURCE_LANGTARGET
并创建这样的合并表 句子_ENG_OTHERS合并句子_ENG_ARA句子_ENG_DEU等... 当我们想要用英语句子的所有语言翻译时 sentences_OTHERS_ENG 当我们想要只有一些句子的英文翻译
我已经创建了一个脚本来创建所有这些表(它们大约有31种语言,所以超过60种合并表),我已经测试过,这项工作真的非常棒,使用160ms的请求现在只需要30: ) 但我发现第15次使用后我的所有合并表都有“NULL”作为存储引擎的类型 而不是MRG_MYISAM,如果删除一个,那么我可以创建一个其他的,在每个创建之间使用FLUSH表也允许我创建更多的合并表
这是mysql的限制吗?我们可以覆盖它吗?
感谢您的回答
答案 0 :(得分:1)
在MySQL Merge存储引擎论坛的这个帖子中,似乎可以将数千个表合并到MERGE表中。有些人遇到了文件句柄耗尽的问题,但通常只有在合并了几百个表之后才会遇到这种情况。我想这也取决于你使用的操作系统 - 也许Windows的阈值较低。
MySQL Forum for MERGE storage engine
就个人而言,如果可能的话,我会避免使用Merge引擎。我在2002年开始使用它,并且被许多MySQL版本的许多错误所困扰。我得到的印象是Merge引擎不是MySQL的优先考虑事项,也许还没有经过很好的测试。在5.1中进行分区似乎更有特色,但对于您的应用程序,我很惊讶您只有一百万行的性能问题。你的索引效率如何?
答案 1 :(得分:0)
(感谢Martin告诉我的方式)
在Linux上,您必须编辑/etc/security/limits.conf
和这样的行
* hard nofile 4096
下次重启时就可以了 让它直接停止你的服务器
ulimit -n 4096 (or more , as root)
直接重启服务器
我还不知道窗户怎么样