非常广泛的非规范化数据(大约40000列)。要使用哪个数据库?

时间:2016-03-30 11:24:59

标签: database postgresql denormalization

我有一个非常具体的问题。我有大约40000列的数据。数据被非规范化,因为处理实时将花费很多。

Postgresql对列号1600有限制。有人可以建议我一个没有这个限制的数据库吗?

或者如果不是数据库,该方法可以存储多么广泛的数据?

分区到较小的表被证明是繁琐的任务,因为在使用特定过滤器执行特定查询时加入它们可能非常麻烦。我已经尝试过了。

谢谢!

编辑:

census.gov/programs-surveys/acs/data.html这是数据集。 示例表:

NR。在一些街道上的人:

列:人数,年龄<18岁,年龄人口<22岁,22岁以上人数<30等

这些组合越来越高。包括种族,性别,国籍等。有40000列。并且这些列无法动态计算。它需要预先计算并存储以便更快地阅读 - Forsythe 15分钟前

2 个答案:

答案 0 :(得分:3)

评论太长了。

我能轻易想到的所有数据库都有数千个限制(至少SQL Server,MS Access,Oracle,MySQL,Postgres,Teradata和DB2)。你可能对柱状数据库有更好的运气,但这些都是相当专业的。

这为您提供了各种选择:

  • 您可以为数据使用键值对。但是,如果数据密集,那么您可能拥有非常大的数据。
  • 您可以使用其他数据结构,例如JSON,XML,数组(在Postgres中)或BLOB(二进制大对象)。
  • 您可以使用NOSQL技术存储数据。
  • 您可以使用统计工具,例如R,SAS和SPSS。

最终,您希望如何存储数据的问题取决于您想要使用它做什么。例如,如果您的系统具有大量关系数据和功能但具有时间序列数据,那么您可以将时间序列存储在自己的表中(每个时间单位一行),或者您可以将系列存储为BLOB,因为您将其返回到应用程序以进行进一步处理。

答案 1 :(得分:0)

也许我错了,但似乎存在理解和数据存在的问题......

你说你想要显示人数,18岁以下,18到21岁之间的人......但这不是存储数据的属性方式...

这里的真实数据是每个人的年龄,他们的性别...然后所有其他列都只是计算...

然后您的查询需要进行参数化,以便您可以正确选择。

使用PHP和MySQL的示例:

//These vars come from user input
$ageMin = 18;
$ageMax = 21;
$gender = "male";

$query = "SELECT COUNT(*) FROM MyTable WHERE 
          Age >= {$ageMin} AND
          Age <= {$ageMax} AND
          Gender = '{$gender}' ... "

如果你说它不能预先计算,那么将这些结果存储在一个表中作为行:

Table Calculated
  IDCalculation (INTEGER)
  Name (CHAR(30))
  Criteria
  Result

所以你只需将40000列转换为行