【发布时间】:2017-04-19 19:35:32
【问题描述】:
我正在构建一个功能来估计我的广告服务平台的库存。我试图用它们的基数来估计的字段如下:
字段:基数
位置:10000(班加罗尔、钦奈等)
n/w 速度 : 6 (w, 4G, 3G, 2G, G, NA)
价格范围:10(1、2、3、4、5、6、7、8、9、10)
users:包含属于上述任何组合的用户数。
例如。 {'location':'bengaluru', 'n/w':'4G', priceRange:8, users: 1000}
表示 1000 个用户来自班加罗尔,拥有 4G 和 priceRange = 8
所以总组合可以是 10000 * 6 * 10 = 600000 并且将来可以在 29 左右添加更多字段(目前是 3 个位置,n/w,价格范围),总组合可以达到 1000 万的数量级。现在我想估计有多少用户属于
现在我需要的查询如下: 1) 查找来自 location:bengaluru , n/w:3G, priceRange: 6 的所有用户
2) 查找来自班加罗尔的所有用户
3) 查找所有低于 n/w: 3G 和 priceRange: 8 的用户
解决此问题的最佳方法是什么?
哪个数据库最适合这个要求。我需要建立什么索引。复合指数会有帮助吗?如果是,那么如何?任何帮助表示赞赏。
【问题讨论】:
-
虽然我同意此时的组合为 600,000,但我相信您的记录数将为 1000*fields 或 29000(如果 29 个字段)。由于每个用户对这些属性中的每一个都只有一个值,对吗?所以你可以有一个 userFields 表,它简单地定义表用户和相关字段的值..
-
1000 是属于该存储桶的用户数。我相信这个问题目前还不清楚。考虑到您的方法,您将如何找到来自班加罗尔且 priceRange 为 7 的用户数量?
-
可能是我没有清楚地理解您的解决方案。考虑您的方法 您将如何找到来自 bengaluru 且 priceRange 为 7 的用户数量?让我们举个例子来解释一下这个问题:很少有文件存在 {'location':'bengaluru', 'n/w':'4G', priceRange:8, users: 1000}, {'location': 'bengaluru', 'n/w':'4G', priceRange:7, users: 10}, {'location':'chennai', 'n/w':'4G', priceRange:8, users: 100}所以对于像 find all users from bengaluru 这样的查询将是 1010,拥有 4G 的用户是 1110,priceRange 为 8 的用户是 1100
-
Select Count(1) from TableUservalues where (field,value) in (('location','bengaluru'),('priceRange',7)) having count(distinct concat(field,value))=2这是上一个问题中的一个示例:stackoverflow.com/questions/927724/… 这里唯一的区别是您有一个成对的值映射,因为它们只有一个键和一个值。 -
其他可能的示例:stackoverflow.com/questions/24179584/… ... stackoverflow.com/questions/16803592/… 以及有关此方法的优缺点的更多信息:stackoverflow.com/questions/126271/…
标签: database inventory-management nosql