postgresql 如何支持10亿级别的数据??

Jeenyyin 2019-04-10 09:54:01
postgresql 如何支持10亿级别的数据??
...全文
3999 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
丁劲犇 2020-07-25
  • 打赏
  • 举报
回复
引用 7 楼 newpb80 的回复:
[quote=引用 3 楼 丁劲犇 的回复:]可以支持,用分区即可。主要是控制索引的规模。
如果比较懒,可以单表,用部分索引来分割,比如按范围做索引。
分区参照:
https://blog.csdn.net/goldenhawking/article/category/1222775


我现在是插入2亿以上的数据 花了20多分钟,希望提高写入数据库性能有啥提高性能的办法
多谢[/quote]

https://blog.csdn.net/goldenhawking/article/details/107583951
丁劲犇 2020-07-25
  • 打赏
  • 举报
回复
写入数据库的性能有好多影响因素,大概帮着总结几句。如果有钱,愿意投入10-20万,那直接转到最后(0)。
1、如果是备份整体一波导入(如pgRestore),那就是COPY最快。导入完了,再建立索引和各种约束。
2、那种表单可以整体删除、改名的,参考1. 先建立临时表,导入完毕后,老的改_OLD,新的改为正确的名字。
3、大部分情况是无法如此理想的,面对的都是热导入(结构、约束、参照完整性、名称都不能修改)。一般遵循4-6.
4、导入前调整参数postgresql.conf
(1)导入前关闭auto_vacuum选项。
(2)调节wal的性能,checkpoint 放宽,往大了整,共享、maintain内存设大。如果是32G的服务器,共享设为1G,maintain 1G即可。
(3)如果你的导入中,有很多触发警告的操作,把各种日志的级别设为fatal以上。这样防止产生大量文本日志。
5、导入时,一般都是一个工具完成的。比如C++Qt、python,等等。工具开发的好不好,就很关键。以Qt为例子
(4)对于需要查询后按需导入的情况,要在数据库连接打开后,尽快设置为“前向”forwordOnly,首先降低查询的代价。
(5)把任务囤积起来,用事务切割为10万条一个单位,而后调用QSqlQuery::execBatch功能整体的执行插入。插入后commit。
6、如果做了上述工作,还是很慢,那就请进行有针对性的分析式优化:
(6)观察网络使用率。若网络使用率>=90%, 请在数据库本地导入,而不是基于以太网。以太网会带来很多开销。
(7)观察服务器当前导入的进程(postgres)的CPU,如果CPU达不到单核全满,则说明磁盘爆了。请使用固态或者万转盘阵. 这种情况常出现在访问量密集,单记录简单的情况。
(8)观察服务器当前导入的进程(postgres)的CPU,如果CPU单核全满,而磁盘不满,说明计算力不够。此时,插入时开N个会话一起干,直到CPU与磁盘达到均衡(一般是CPU单核会话50%,磁盘也略有拥塞)。这种情况比较少,比如你的记录有很多数组、JSON\GIS之类的复杂类型, 且触发器里做计算时常见。
。。。做到这里基本就差不多了……话锋一转:
(0)最终,钱能够显著提高插入的速率。记住:有钱就可以韧性,买8~10块SSD做成盘阵,CPU上5-6万一块的至强,而后多会话并行插入,1-8都不用看了。


newpb80 2020-07-25
  • 打赏
  • 举报
回复
引用 3 楼 丁劲犇 的回复:
可以支持,用分区即可。主要是控制索引的规模。
如果比较懒,可以单表,用部分索引来分割,比如按范围做索引。
分区参照:
https://blog.csdn.net/goldenhawking/article/category/1222775


我现在是插入2亿以上的数据 花了20多分钟,希望提高写入数据库性能有啥提高性能的办法
多谢
minsic78 2019-10-21
  • 打赏
  • 举报
回复 1
这要看你怎么用这10亿数据。
哈哈gogo 2019-10-20
  • 打赏
  • 举报
回复
postgresql接近oracel的性能,基本上没问题
丁劲犇 2019-04-24
  • 打赏
  • 举报
回复
这个博客里的分区,虽然测试用了千万条,但是应该和10亿是类似的。因为插入10亿条会要很久,所以没有放上去。我在生产环境中存放过大概6亿条记录,400多GB,没有太大问题。

分区、非关系字段参考这个文章。分区时,CHECK条件要写好,可以直接根据条件避免查询没必要的子表。
丁劲犇 2019-04-24
  • 打赏
  • 举报
回复
可以支持,用分区即可。主要是控制索引的规模。
如果比较懒,可以单表,用部分索引来分割,比如按范围做索引。
分区参照:
https://blog.csdn.net/goldenhawking/article/category/1222775
Jeenyyin 2019-04-15
  • 打赏
  • 举报
回复
我有考虑把postgresql换成clickhouse,但是clickhouse从来没用过,不知道里面会有多大的坑。
  • 打赏
  • 举报
回复
这个单表感觉都可以支持,如果存储量上不大(比如字段少,字段短) 可以试一下分区表,但是不是很好用
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。 PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。 事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 本课程作为PostgreSQL数据库管理一,主要讲解以下内容:1.     PostgreSQL安装和环境准备2.     PostgreSQL数据查询3.     PostgreSQL 数据过滤4.     PostgreSQL 多表的联接5.     PostgreSQL数据的分组6.     PostgreSQL合集的操作7.   PostgreSQL 合集的分组

954

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧