我应该将哪个DBMS用于1000列并且没有连接?

时间:2016-10-13 08:34:44

标签: sql database database-design architecture nosql

我们的表设计包含10,000,000条记录和200,000列。

这些列是以下的混合物:

  • 二元旗帜。
  • 整数。

查询需要一次对and列执行or / 1-100次操作,并且应在0.1秒内完成,返回唯一的投影/子集每个匹配的行。

每天新增10个新列。

每天新增约1,000行。

没有加入。

哪个DBMS最适合这个?

这种做法背后的原因:
这些列是来自用户定义查询的具体化索引:这就是为什么每天都会添加新列(因为更多用户提出自己的查询)。另一种选择是不使用物化视图,并让用户的查询执行连接。这里的问题是查询可以采取任何形式,并且总体而言,每个人查询都会有大量非常不同的执行计划......由于用户定义了查询,因此无法使用优化传统的SQL数据库进行优化索引,规范化表等

2 个答案:

答案 0 :(得分:1)

暂且不说,为什么要使用1000列,你可以查看下面支持的数据库,无限列

enter image description here

参考文献:https://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

答案 1 :(得分:1)

首先,我建议测量ad-hoc JOIN,如果您发现性能不足,则仅进行进一步优化。我知道可能很难衡量每一个可能的查询,但是你可能能够涵盖大多数常见/有代表性的案例,如果他们表现得足够好就停在那里。使用good indexing可以做很多事情!

,并且只有在上述测量值得保证的情况下,才为每个即席查询创建一个新的单独的物化视图。

  • 有些数据库可以自动为你保存这样的视图 1 ,所以如果" base"数据更改后,相关结果将自动添加到物化视图中或从物化视图中删除(就像它们来自"实时"查询结果一样)。
  • 其他数据库可能允许定期刷新 2

请注意:维护物化视图不是免费的,并且有数千个(特别是如果它们不断保持最新,而不是定期刷新)肯定会影响插入/更新/删除性能基础数据!

1 例如SQL Server索引视图。

2 例如Oracle Materialized视图虽然看起来像12c也可以做一些接近SQL Server的立即刷新。