我有在线服务(在线词汇训练师)。每个用户都有自己的词汇。
现在,我不确定,我应该如何构建我的Mysql-DB。
据我所知,我有不同的可能性:
一个表中的所有内容(MyISAM):我将所有词汇表存储在一个大型MyISAM表中,并添加一列“userid”来识别每个用户的词汇
每个用户都有自己的表(MyISAM):每次创建用户时,程序都会添加一个名为“vocabulary_ {userid}”的表,其中{userid}是将表连接到用户
一个表中的所有内容(InnoDB):与第一点类似,但使用InnoDB而不是MyISAM。
问题是,一个大型词汇表最多可以达到1亿行。使用MyISAM,问题是,每个查询都会锁定整个表。所以我想,如果有很多用户在线(并发送许多查询),表可能会被锁定很多。对于InnoDB,我只是不确定,这是一个很好的解决方案,因为我有一些SELECT,UPDATE和INSERT命令。
我希望有人能帮助我。提前谢谢。
答案 0 :(得分:3)
答案 1 :(得分:1)
取决于
如果你开始为每个用户开一张桌子(也就是分片),你会在开始时遇到一些麻烦。
如果您现在不需要扩展。去找一张有良好指数的桌子。我不会使用MyISAM而是使用InnoDB,否则你会受到MyISAM的bigest问题的影响(锁...)
答案 2 :(得分:1)
我认为,正常的关系设计会使用三个表:
如果MyISAM在进行查询时锁定表,那么如果需要对User_Vocabulary表进行并发更新,则无法使用MyISAM。所以,请使用InnoDB获取所有表格。