PostgreSql中的数十亿行:分区还是不分区?
是)我有的:
>简单的服务器,一个xeon,8个逻辑核心,16 gb ram,mdadm raid1,2x 7200rpm驱动器. 表的简化模式,将是非常大的: id| integer | not null default nextval('table_id_seq'::regclass) url_id | integer | not null domain_id | integer | not null position | integer | not null 上面的架构的问题是我没有关于如何对其进行分区的确切答案. 我想过在“domain_id”字段上进行分区,但问题是很难预测每个分区会有多少行. 我的主要问题是: 如果我不使用分区修剪而且我不打算删除旧数据,那么分区数据是否有意义? 什么是利弊? 如果我不进行分区,如何降低我的导入速度? 另一个与规范化有关的问题: url应该导出到另一个表吗? 正常化的优点 > Table将包含平均大小为20-30字节的行. 非规范化的优点 >可以更快,更快地导入数据,因为我不必在每次插入之前查找“url”表. 任何人都可以给我任何建议吗?谢谢! 解决方法
如果您要在大多数查询中具有选择条件,允许计划程序在大多数时间内跳过对大多数分区的访问,或者您希望定期清除分配给分区的所有行,则分区最有用,或者都. (删除一个表是删除大量行的一种非常快捷的方法!)我听说人们达到了一个阈值,在这个阈值中,分区有助于保持索引更浅,从而提高性能;但实际上回到第一点,因为你有效地将索引树的第一级移动到另一个地方 – 它仍然必须发生.
从表面上看,听起来不像分区会有所帮助. 另一方面,标准化可能会比预期更好地提高性能;通过将所有这些行保持更窄,您可以在每个页面中获得更多行,从而减少整体磁盘访问.我会做适当的第3次正常形式规范化,并且仅基于证据表明它会有所帮助.如果在仍有第二个数据副本的磁盘空间时发现性能问题,请尝试创建非规范化表并查看性能与规范化版本的比较. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- cocos-js如何播放cocos studio 上的动画帧
- 如何为不同目的使用相同的元素名称(在XML和DTD中)?
- cocos3.10 遇到企鹅游戏,点击屏幕白屏的解决方案
- JSONKit
- ruby-on-rails – Rails渲染为json,包括嵌套属性和排序
- c – CLang中的enable_if错误是否有更好的解决方法(错误117
- (2.3.12.1)正则校验字符串是否为数字
- sqlite入门基础(二):sqlite3_get_table,sqlite3_free_tabl
- c# – Xamarin.Form问题的流畅设计
- NoSQL(MongoDB,Redis,Tokyo Cabinet, Berkeley DB)解决方案