如何解决如果未定义查询,则选择哪个数据库基于多列的过滤
我们有一个用于管理站点的管理门户。在一个租户中,我们说大约有20-3000万个站点。我们显示以下网站详细信息-
**Site Name Site Url Site Owner StorageUsed StorageQuota Site Visits Site Viewed NumOfFiles CreatedBy CreationSource**
现在,我们提供了对某一列进行排序的功能,但用户可以按任意数量的列和任何顺序进行过滤(在我们的情况下,顺序无关紧要)。例如,传入查询可能类似于-
Where owner = "owner1" and createdby = "owner2" and siteVisits> 1000
order by SiteUrl
Or
Where CreationSource = "Chrome" and StorageUsed > 1000 and SiteOwner = "owner3" and StoragetQuota > 2000
order by SiteName
选择任意组合。现在您看到我们在这里没有定义查询,用户可以来,可以在任何列上进行过滤并按任何列进行排序。当前,我们正在使用SQL,并且在每个可过滤和可排序的列上都有索引。我们无法在此处使用Composite index,因为我们无法为每个组合创建索引。即使限制用户只能按特定的顺序(从左到右)进行过滤,也会有很多组合,因此会向该表添加索引,并且可能会添加更多列(虽然很少见),但会指数增加索引的数量。买不起。我们知道SQL Server使用的Hash / Merge join并不完全是O(n * m),并且更好。
现在我们还有什么可以做的吗?我们真的愿意探索任何其他已知的数据库来解决此问题。我们探索了ES,但是在那里没有看到任何好处。
解决方法
如果您不想使用动态sql创建查询,而又不得不处理安全性(sql注入)和性能,那么请看一下SSAS并创建一个多维数据集。
二维(站点和存储)和一个事实表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。