- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在创建一个像 Tinder 这样的应用程序。用户可以向右滑动或喜欢,向左滑动或不喜欢其他用户。问题是关于存储用户的操作。如下用户操作需要一个表
Person 1. | Person 2. | op
__________________________________
000001. 000007. Dislike
000001. 000011. Like
000001. 000053. Dislike
000001. 000173. Dislike
它存储操作,也用于不向用户显示更多次。到目前为止一切正常。
但问题是,如果只有 1000 个用户刷另外 1000 个用户,那么该表将有 100 万行。如果有 100,000 个用户这样做......它会达到 100M 行!这是非常巨大的。
你们有什么想法可以设计一个不会长得这么大的结构吗?
谢谢。
最佳答案
有几件事需要考虑。
首先,除非您知道需要运行的查询类型,否则表的大小并不是很有趣。正如其他人所说,拥有数亿行的表没什么可怕的,如果您在可索引字段上查询,您可能可以扩展到 十亿 行,而无需采用奇异的解决方案通过购买更大更好的硬件。因此,90% 的查询都是
选择 *
来自用户
其中 user_id 不在
(选择 interacted_user_id
来自互动
其中 interacting_user_id = $current_user)
限制 10
我的猜测是,这将在您的笔记本电脑上扩展到数亿行,在一台像样的服务器上扩展到数十亿行。我的强烈建议是使用没有分区的简单关系解决方案或其他奇特的解决方案,直到您扩展到不再有效的程度,并且您已尽可能调整查询并升级硬件。这比任何其他解决方案都便宜/容易。
更大的挑战将是地理空间方面 - 据推测,您希望根据与当前用户的距离对结果进行排序。
您可以对数据进行分区的一种方法是按区域收集“交互”。这需要一些思考——您可能不想要“硬”边界,而是想要重叠的地理区域。 map 上的每个点都可能有几个重叠的“区域”,每个区域都有自己的表格。您在一个地区拥有的用户越多,重叠的圆圈就越小——曼哈顿可能有 3 个地区,格陵兰可能只有 1 个。然后您的查询会查看每个重叠地区的表,并合并以前没有的用户与当前用户交互。
关于mysql - 为类似 Tinder 的应用程序设计高效的 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55103477/
如何有效地设计一个C++模块化程序?如何学习? 最佳答案 对于初学者,您可能希望采取“暴力”过程: 1. 在一个文件中写一个简单的main函数。 2. 增加一些功能,先编译再测试。 3.重构(在谷歌中
前言 有人说现在记事类app这么多,市场这么卷,为什么还想做一个笔记类App? 一来,去年小孩刚出生,需要一个可以记录喂奶时间的app,发现市面上没有一款app能够在两步内简单记录一个时间,可能i
我正处于 Web 应用程序的设计阶段,该应用程序允许用户创建工作请求,并且工作人员可以针对这些请求投入时间。该应用程序还将为主管提供报告功能,以获取每日总计、报告,并说明花费的时间、“成本分配”。 我
前言:很多刚刚接触编程的人都不知道怎么下手编写程序,特别是学习了新的知识点,不知道有什么用,那么本文将以简单的存储结构及简单的运算,条件语句,分支语句,循环语句结合,带来一个双人对战版五子棋,这是一
我正在尝试通过 C++ 多线程解决网络流量问题。 给定一个网络(所有节点都由弧连接,每个弧连接2个且只有2个结束节点,一个是输入节点,另一个是输出节点,每个节点可以有多个输入弧和输出弧),每个节点需要
我有一个关于编程和文件的问题。 while(current!=NULL) { if(current->Id_Doctor!='\0') { current=current->next;
下面的‘C’语句执行什么操作? star = star ^ 0b00100100; (A) 切换变星的第 2 位和第 5 位。 (B) 清除变量星的第 2 位和第 5 位以外的所有位。 (C) 设置除
我写了下面的代码: #include int main() { int a, b; printf("Enter values of a and b\n"); scanf(" %d%d "
我正在将 C 代码编程到 PIC 板上。我的问题是如何让我的程序计算按下按钮(RB0)的时间。然后它会显示所花费的时间并将其显示在液晶显示屏上。以毫秒为单位计算。下面是到目前为止我的代码。 /
我是一名优秀的程序员,十分优秀!