我有一个非常具体的问题。我有大约40000列的数据。数据被非规范化,因为处理实时将花费很多。
Postgresql对列号1600有限制。有人可以建议我一个没有这个限制的数据库吗?
或者如果不是数据库,该方法可以存储多么广泛的数据?
分区到较小的表被证明是繁琐的任务,因为在使用特定过滤器执行特定查询时加入它们可能非常麻烦。我已经尝试过了。
谢谢!
编辑:
census.gov/programs-surveys/acs/data.html这是数据集。 示例表:
NR。在一些街道上的人:
列:人数,年龄<18岁,年龄人口<22岁,22岁以上人数<30等
这些组合越来越高。包括种族,性别,国籍等。有40000列。并且这些列无法动态计算。它需要预先计算并存储以便更快地阅读 - Forsythe 15分钟前
答案 0 :(得分:3)
评论太长了。
我能轻易想到的所有数据库都有数千个限制(至少SQL Server,MS Access,Oracle,MySQL,Postgres,Teradata和DB2)。你可能对柱状数据库有更好的运气,但这些都是相当专业的。
这为您提供了各种选择:
最终,您希望如何存储数据的问题取决于您想要使用它做什么。例如,如果您的系统具有大量关系数据和功能但具有时间序列数据,那么您可以将时间序列存储在自己的表中(每个时间单位一行),或者您可以将系列存储为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列转换为行