首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >每用户向数据库插入约4K行-设计和性能

每用户向数据库插入约4K行-设计和性能
EN

Stack Overflow用户
提问于 2018-06-04 05:46:19
回答 3查看 48关注 0票数 0

我正在编写一个应用程序,允许每个用户在三个类别中标记英语单词(一些词汇练习)。

主DB表Word包含大约4K个不同的单词行。Label表格包含3个标签。--> Word- label 表(包含3列: word_id、label_id、user_id)将为每个用户添加4K行(假设当用户注册到系统时,所有单词都以某个预定义的标签开头)。

问题是这个表将会增长得非常快。在我看来,1:4000 (用户/行)是不好的。

你能在这里提出什么建议来消除这么大的一张桌子?我读到过,每个用户的表也被认为是不好的做法。

此外,我使用的是Spring & Hibernate和用户首次注册后的4K插入,这是非常困难和耗时的。

我可以考虑一些NoSQL解决方案或Hibernate之外的其他工具,但我决定使用Java和-所以建议一些合适的工具。

会很高兴在这里得到你的帮助!

EN

回答 3

Stack Overflow用户

发布于 2018-06-04 06:26:50

数据大小没有问题。您可能对Hibernate有问题,但这是另一个问题。

如果您最终拥有数千个用户,那么您将拥有数千万行。这不是很大的行数。如果要为新用户插入默认标签,则代码应如下所示:

代码语言:javascript
复制
insert into userLabels (userId, wordId, label)
    select :userId, w.wordId, <default label>
    from words w;

如果这花费的时间超过一两秒,我会感到惊讶。

如果你知道你会有数百万的用户,那么规模可能是一个更大的问题。最佳解决方案需要对应用程序有更好的理解。解决方案可能会有所不同,包括对表进行分区、使用数组,或者采用不同的结构来表示数据。

您可能希望在表上使用不同的索引来提高性能,但这取决于要运行的查询。您可以考虑使用数据库的本机接口。您的用例看起来并不是特别复杂,所以我不知道Hibernate或类似的层给您带来了什么好处。

票数 3
EN

Stack Overflow用户

发布于 2018-06-04 05:56:29

第一种方法是,您只需在操作后将新行添加到user的word-label。因此,并不是每个用户都可能在该表中有4k行。现在,当您的数据库查询和围绕该功能的东西将是一个问题(瓶颈)时,请尝试解决该问题并提高性能。

在sql数据库中,您可以使用许多性能技巧。例如,您编写了关于每个用户的表。这不是最好的解决方案,下一个例子,在mysql中,你可以创建表部分,它将作为一个表来处理,但性能会有所提高。

第二种方法,对于这种类型的数据,像MongoDB这样的NoSQL当然会有很好的性能。

票数 1
EN

Stack Overflow用户

发布于 2018-06-04 06:12:40

您可以将用户响应映射编码为4000个条目的位数组,如果不需要数据库的关系功能,则可以将其编码为字符串

那么它将是每个用户一条记录。

代码语言:javascript
复制
create table user_words (userid int, wiorddata text);
insert into user_words values (1,'YNYYNmmmYY'/* ... */ );

你的应用程序需要有每个字符所引用的单词和kniow的列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50671264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档