Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “最有效的存储方式”;“喜欢”;比如Facebook和Stackoverflow_Php_Mysql_Database_Performance - Fatal编程技术网

Php “最有效的存储方式”;“喜欢”;比如Facebook和Stackoverflow

Php “最有效的存储方式”;“喜欢”;比如Facebook和Stackoverflow,php,mysql,database,performance,Php,Mysql,Database,Performance,在mysql数据库中存储“喜欢”或“赞成票”的最佳方式是什么 我是这么想的: likes (table) id (auto increment) post_id user_id 但是likes表是否会有数百万甚至数十亿行,因为每个想要帖子的人都会插入到一行中,每个人都可以喜欢不止一次,并且有不止一个用户 facebook或stackoverflow如何在数据库中做到这一点?任何链接或指南是感激的。谢谢。你不需要一个专栏来支持反对票吗 去掉身份证;相反,请使用主键(pos

在mysql数据库中存储“喜欢”或“赞成票”的最佳方式是什么

我是这么想的:

likes (table)
    id (auto increment)
    post_id
    user_id
但是
likes
表是否会有数百万甚至数十亿行,因为每个想要帖子的人都会插入到一行中,每个人都可以喜欢不止一次,并且有不止一个用户


facebook或stackoverflow如何在数据库中做到这一点?任何链接或指南是感激的。谢谢。

你不需要一个专栏来支持反对票吗

去掉身份证;相反,请使用
主键(post\u id,user\u id)

通过首先使用
post\u id
,您可以高效地找到给定职位的所有投票。同时,用户id的所有投票列表效率较低。如果需要,还可以使用
索引(用户id)

存储一个以逗号分隔的用户id的字符串(或json)。 不需要额外的表,只需将其作为列添加到文章中即可。
额外的一栏可用于表示喜欢的总数。

太宽,可能会吸引到固执己见的答案。请就此提出更具体的问题。此表中有数百万行没有内在问题。但是,您可能还希望在posts表中使用一个非规范化列来缓存所有投票组合的结果“分数”(这样您就不必每次都计算它)。去掉
id
会做什么?主键做什么?@packnob890删除id列可以节省1/3所需的数据存储。“主键”选项允许您说一行是由两列的组合唯一标识的,因此也可以对这两列的组合强制唯一性。@packnob890-并且在InnoDB中,数据与PK聚集在一起。因此,一旦它查找PK,数据就在那里;没有额外的步骤。在单个字段中以逗号分隔的值作为字符串是一种SQL反模式和代码味道。它破坏了原子的本质field@MatBailie如果您想坚持DB系统提供的功能,在Postgres或mariaDB(mysql也计划这样做)等更现代的数据库中甚至还有一个json列。如果您更深入地了解json或csv在数据库中的真正含义,您会发现两者之间没有太大区别。过度规范化是这里的反模式,imho.JSON数据类型、数组、结构等由RDBMS本机支持,保留强大的数据类型强制、启用索引和约束等。使用字符串和任意分隔符模拟它会导致一长串潜在故障、调试困难,性能管理费用和维护费用。从工程的角度来看,这应该是最后的手段,而不是第一选择。