我们架构中的表已经有100列。如果我们遵循水平数据存储方法,我们需要添加大约600列。如果我们进行垂直数据存储,这意味着创建新表并使用包含100列的表创建参照完整性,则加入表将会出现问题,因为具有100列的表具有5300万条记录,并且创建的新表将具有更多比起那个来说。哪种方法更好 在这种情况下。
我想在这里添加一个有趣的测试用例。我在我的表中添加了600列,已经有87列和5300万条记录。然后我尝试批量更新它
a>更新1000条记录的时间>> 2.10秒 b>更新10000条记录的时间>> 5.57秒 c>更新1000000条记录所花费的时间>> 5.42分钟 d>更新5300万条记录所需的时间>> 4. 5小时(表空间耗尽,我们需要扩展表空间)
有人可以建议更快的更新方法吗?
答案 0 :(得分:2)
您需要问自己的问题:
答案 1 :(得分:1)
编辑:这实际上是一个非常有趣的问题,我现在很好奇。我建议做一些现实世界的测试,一个大表与多个表,尽可能多的数据。值得付出额外的努力!请记住,即使关系数据库的设计很差,并且有数百万条记录(我在与承保公司签订合同时经历过这种情况,而不是在之后修复)并不容易。因此,您的单桌设计也可以起作用 - 测试中的证明。
5300万条记录?我希望您使用的是真正的关系数据库引擎,如MySQL / SQL,它们旨在处理大表。
单个表中的600多列对我来说听起来有点过分。我认为它不是一对多的记录结构,这就是为什么你选择一对一的方法?即便如此,根据您的数据而言,拥有单独的表可能更好。答案 2 :(得分:1)
不冒犯任何人......我想知道您存储在100列中的数据是否超过5300万条记录的确是 normalized ?
如果没有,你真的应该开始这样做。你可能会减少很多行数(例如,它可能会分成三个1000和1000以及53个记录的表。我知道,它不是那么容易,只是为了表明理论上数字有多小是)。很可能在规范化之后仍有5300万个记录表,但这可能会保持很小,甚至可能只包含外键。通常,您永远不会需要所有数据。理想情况下,您可以对只有几千条记录的表执行许多查询。
如果你正常化,不要太害怕加入。最后,无论如何它会更快。确实有例外。
答案 3 :(得分:0)
高度取决于数据的性质及其使用方式。
将数据写入xml文档然后将文档存储在db ...
中可能是合适的答案 4 :(得分:0)
您可以考虑使用面向列的数据库,看看HBase(http://hadoop.apache.org/hbase/),这是一个以Google大表格为模型的分布式,面向列的存储。