【发布时间】:2019-03-11 13:57:54
【问题描述】:
我正在创建一个像 Tinder 这样的应用程序。用户可以向右滑动或喜欢,向左滑动或不喜欢其他用户。问题是关于存储用户的操作。如下用户操作需要一个表
Person 1. | Person 2. | op
__________________________________
000001. 000007. Dislike
000001. 000011. Like
000001. 000053. Dislike
000001. 000173. Dislike
它存储操作,也用于不向用户显示更多次。到现在还好。
但问题是,如果只有 1000 个用户刷另外 1000 个用户,该表将有 1M 行。如果有 100,000 个用户这样做......它会达到 100M 行!这是非常巨大的。
你们有什么想法不要让结构设计变得这么大吗?
谢谢。
【问题讨论】:
-
此外,现代数据库系统的设计目的是在可以使用索引的情况下处理数百万甚至数十亿条记录,如果确实需要,您还可以在此基础上部署分区。
-
像这样在(薄)表中存储 100M 行不是问题。根据您要选择的内容和方式,从中检索 sumerized 数据可能是个问题。在这种情况下,您可能需要一个触发器管理的临时表,它将保存关系的当前状态(每个关系一行)。
-
是的,但这不仅仅是关于数据库。即使 MySQL 可以处理数百万行,它也需要大量的 RAM 和 CPU。你知道我不是硅谷公司吗? ;) 我正在考虑一个解决方案......我们向用户显示用户队列。如果我们设置一个指针,告诉用户刷到队列中的第 37 位用户(例如)并存储喜欢的用户怎么办?然后,如果喜欢的用户不喜欢第一个用户,我们会删除该行。你觉得怎么样?
-
“是的,但不仅仅是数据库。即使 MySQL 可以处理数百万行,它也需要大量的 RAM 和 CPU。” 表结构是什么?
SHOW CREATE TABLE table也许您应该规范化列以保存INT或BIGINT而不是VARCHAR以节省 RAM/磁盘空间。此外,数据库很可能是更多的磁盘 I/O 限制然后 CPU 限制 -
按照@ArnaudPeralta 的建议去做,让用户在那里选择性取向,并在创建帐户时添加更多过滤器,如年龄、国家、状态。并使用过滤器仅向用户显示匹配的其他用户帐户那些过滤器。
标签: mysql database data-structures tinder