mysql - 社交网络的图形数据库

标签 mysql database database-design social-networking

我在做一个类似于社交网络的系统。最大用户数最终必须为 50.000 或最多 70.000。

目前我正在使用 mysqli+prepared 语句。 ERD现在有30张 table ,最终可能会达到40张 table 。

所以,我的问题是:我从未使用过图形数据库...我已经通过 mysql workbench 完成了 ERD,并且已经开发了一些代码。对于这个项目中预期的用户数量,建议从 MySQL 更改为图数据库?我的sql代码和数据库模型可以用吗?这种变化有什么好处吗?

你怎么看?

谢谢

最佳答案

如果您可以访问递归查询(在 MySQL 中不是这种情况,但在 PostgreSQL 中可用)并且您的查询涉及最大深度标准(这可能是您在社交网络上的情况),或者它们是否已正确编入索引。

有多种索引图的方法。在您的情况下,您的图表可能并不密集,因为您正在处理几乎独立的多个森林(您通常会处理紧密聚集的用户组),因此您有很多选择。

最容易实现的是传递闭包(基本上就是调用所有潜在路径的预计算)。在您的情况下,它很可能是部分的(例如,深度 2 或深度 3)。这允许在单独的表中完全索引相关节点,以实现非常快速的图形查询。使用触发器或存储过程使其保持同步。

如果您的图表比这更密集,您可能需要考虑使用 GRIPP index .与嵌套集非常相似,如果您删除 (rgt - lft - 1)/2 = number of children 属性,并为 lft/rgt 使用浮点值,则后者效果最好(更新最快)而不是整数。 (这样做可以避免在插入/移动节点时重新索引整个图 block 。)

关于mysql - 社交网络的图形数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6269387/

相关文章:

mysql - 如果多个 UNION 查询的所有结果均为 0,则更新表

php - 可以使用MySQL函数实现语言检测吗?

mysql - 在数据库中使用 Unique 与以编程方式执行此操作

database - 具有不同发布周期的两个应用程序是否应该共享一个数据库

MySQL 日期时间索引不起作用

php - 使用单个 ID 列引用多个表

MYSQL:将产品分成几列

php - SQL 选择日期在今天之前的记录

java - 像 Java 中的 select 一样实现 SQL

java - 从具有空值的数组动态填充 Java 中的 SQL