我们有一个用于管理站点的管理员门户。在一个租户中,我们说大约有 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,并且我们对每个可过滤和可排序的列都有索引。我们不能在这里使用复合索引,因为我们不能为每个组合创建索引。即使我们限制用户只能按照从左到右的特定顺序进行过滤,也会有如此多的组合和索引,并且可能会有更多的列被添加到这个表中(虽然很少见),但会增加索引的数量成倍增长。买不起。我们知道 SQL 服务器使用Hash / Merge 连接 ,这不完全是 O(n*m) 并且更好。
现在我们还能在这里做些什么吗?我们非常愿意探索任何其他已知的数据库来解决这个问题。我们探索了 ES,但没有看到任何好处。