大型数据库

时间:2012-12-28 21:48:06

标签: mysql database innodb myisam

我有在线服务(在线词汇训练师)。每个用户都有自己的词汇。

现在,我不确定,我应该如何构建我的Mysql-DB。

据我所知,我有不同的可能性:

  1. 一个表中的所有内容(MyISAM):我将所有词汇表存储在一个大型MyISAM表中,并添加一列“userid”来识别每个用户的词汇

  2. 每个用户都有自己的表(MyISAM):每次创建用户时,程序都会添加一个名为“vocabulary_ {userid}”的表,其中{userid}是将表连接到用户

  3. 一个表中的所有内容(InnoDB):与第一点类似,但使用InnoDB而不是MyISAM。

  4. 问题是,一个大型词汇表最多可以达到1亿行。使用MyISAM,问题是,每个查询都会锁定整个表。所以我想,如果有很多用户在线(并发送许多查询),表可能会被锁定很多。对于InnoDB,我只是不确定,这是一个很好的解决方案,因为我有一些SELECT,UPDATE和INSERT命令。

    我希望有人能帮助我。提前谢谢。

3 个答案:

答案 0 :(得分:3)

InnoDB一起使用几乎总是更好。 InnoDB可以处理100毫安行,最大大小为64tb.

听起来你没有关系数据集,但更多的是关键/值存储。也许Riak是更好的解决方案。

答案 1 :(得分:1)

取决于

如果你开始为每个用户开一张桌子(也就是分片),你会在开始时遇到一些麻烦。

如果您现在不需要扩展。去找一张有良好指数的桌子。我不会使用MyISAM而是使用InnoDB,否则你会受到MyISAM的bigest问题的影响(锁...)

答案 2 :(得分:1)

我认为,正常的关系设计会使用三个表:

  1. 用户 - 用户ID和其他属性:姓名,电子邮件等
  2. 词汇 - 从问题中最不清楚,但可能是包含词性和意义的词语,可能包括单词ID(因为某些单词拼写有多重含义)。
  3. User_Vocabulary - 包含用户ID,Word ID以及“学习日期”等属性的表格。
  4. 如果MyISAM在进行查询时锁定表,那么如果需要对User_Vocabulary表进行并发更新,则无法使用MyISAM。所以,请使用InnoDB获取所有表格。