我在我的应用程序的数据库(MySQL)中有一个连接表,它会大量增长。
我有两个型号的用户和产品,用户有许多产品要查看,产品属于许多用户如何查看它。
开始时,所有用户都有要查看的所有产品,用户可以编辑他可以查看的产品。
表大小为(n*m) n的问题是用户数(很大),m是产品数量(也很大),而表上的读取操作将很慢。
示例:我有3个用户的id:"1,2,3“
三个产品的身份证:"1,2,3“
因此,users_products表将是:
user_id,product_id 1,1 1,2 1,3 2,1 2,2 2,3 3,1 3,2 3,3
我愿意接受所有的解决方案,从重新设计这个部分开始使用另一个数据库系统。
提前谢谢。
发布于 2012-12-17 07:12:03
我觉得你的假设可能不是真的。即使有很多行,SQL服务器也能快速处理这类查询。如果您有好的索引,有1000万条记录的表可以被快速查询。
在进行各种早期优化之前,我建议进行一些测试。
发布于 2012-12-17 07:02:51
你查过Neo4J了吗?这是一个文档丰富的图表数据库,在我看来,这对于这个特殊的用例来说是完美的。你建模的方式太简单了。
每个用户和每个产品都由一个节点表示。要么在它们之间创建一个关系"IS_ABLE_TO_SEE“,要么不创建。
然后,您可以使用一系列功能再次检索此数据。我最喜欢的一种方法是使用遍历,从节点开始,然后遍历关系(您可以选择遍历的方向和方向)。但是,这对于检索彼此之间的几个深度级别的数据更为有用。
在我们的特定用例中,您可以执行一个简单的查询,返回通过"IS_ABLE_TO_SEE“关系连接到用户节点的所有产品节点。
对于没有图形数据库经验的人来说,Neo4J是非常容易访问的,正如我所说的那样,它基本上适合您在这里展示的用例。
发布于 2012-12-17 12:45:20
正如Pieter在Neo4J中指出的那样,我是Couchbase和Neo4J的忠实粉丝。这是一个简单的列表,关系表不太适合这些操作。
在Couchbase中,您可以使用多种方法,一种是使用简单的client.append保存产品列表,然后使用单个client.get检索列表。这有两种可能性,一种是追加前的dedupe,另一种是后面的dedupe。以极快的速度抓取一张清单,将消除任何形式的查询。
另一种方法是使用JSON,并拥有用户可以访问和查看的每个产品的数组。与第一个示例中的简单字符串相同,但如果需要的话,您可以在JSON中对其执行Map/Reduce。
在这两种情况下,它的性能都优于任何类型的查询。
https://stackoverflow.com/questions/13916474
复制相似问题