前几天看了一篇文章<High Performance JSON PostgreSQL vs. MongoDB> 发布在Percona Live Europe 2017

作者是<Dominic Dwyer Wei Shan Ang>,作者的观点是PostgreSQL更好,恰巧没有玩过postgresql,仅仅听说过。

码农的第一特征就是相信实验,故postgresql走起

上一篇文章<mongodb索引--1亿条记录的查询从55.7秒到毫秒级别> 我们做了一个mongo的实验

  >>插入1亿条记录,约耗时1个小时

  >>无索引查询一条记录耗时为55.7秒

  >>有索引查询一条记录耗时小于1秒

1.去官网下载psotgresql :https://www.postgresql.org/

下载最新版本11.1 windows安装,step by step

2.客户端,我选了pgadmin:https://www.pgadmin.org/

下载最新版本v3.6 windows安装,step by step

3.创建新的数据库www

4.创建新表

/*             String sql = "CREATE TABLE PERSON " +
"(ID INT PRIMARY KEY NOT NULL," +
" NAME TEXT NOT NULL, " +
" AGE INT NOT NULL, " +
" ADDRESS CHAR(50), " +
" SALARY REAL)";
stmt.executeUpdate(sql);*/

5.插入1亿条记录

java client 依赖包

        <dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>

java程序

    public void postgresqlOneByOneInsert() {
try {
long start=System.currentTimeMillis();
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/www", "postgres", "root");
PreparedStatement stmt = connection.prepareStatement("INSERT INTO PERSON(ID,NAME,AGE,ADDRESS,SALARY) values(?,?,?,?,?);"); for(int i=0;i<100000000;i++) {
stmt.setInt(1, i+1);
stmt.setString(2, "mkyong"+i);
stmt.setInt(3, i%100);
stmt.setString(4, "address"+i);
stmt.setFloat(5, 25000.00f);
stmt.executeUpdate();
} /* String sql = "CREATE TABLE PERSON " +
"(ID INT PRIMARY KEY NOT NULL," +
" NAME TEXT NOT NULL, " +
" AGE INT NOT NULL, " +
" ADDRESS CHAR(50), " +
" SALARY REAL)";
stmt.executeUpdate(sql);*/ /* ResultSet rs = stmt.executeQuery( "SELECT * FROM STUDENT;" );
while ( rs.next() ) {
int id = rs.getInt("sid");
String name = rs.getString("name");
System.out.println( "ID = " + id );
System.out.println( "NAME = " + name );;
System.out.println();
}
rs.close();*/
stmt.close();
connection.close();
System.out.println("耗时:"+(System.currentTimeMillis()-start)+" 毫秒"); } catch (ClassNotFoundException e) {
e.printStackTrace(); } catch (SQLException e) {
e.printStackTrace();
}
}

然后是漫长的时间等待插入完成。

>>插入性能:1亿条记录导入时间耗时:36599195 毫秒~10个小时

 >>无索引时读取性能:SELECT * FROM PERSON where name='mkyong90000000';   9 secs 574 msec

>>有索引时读取性能:create index name_ind on PERSON(NAME); //创建索引耗时5 min 9 secs. SELECT * FROM PERSON where name='mkyong90000000'; //61ms

小结:

  1. 插入性能:mongo的效率为postgresql的10倍

  2. 读取性能:无索引时,postgresql是mongo的6倍左右

  3. 创建索引:postgrep要快,有索引查询不能确定查询时间差异

数据库新秀 postgresql vs mongo 性能PK的更多相关文章

  1. [转帖]PostgreSQL 参数调整(性能优化)

    PostgreSQL 参数调整(性能优化) https://www.cnblogs.com/VicLiu/p/11854730.html 知道一个 shared_pool 文章写的挺好的 还没仔细看 ...

  2. java 使用jdbc连接Greenplum数据库和Postgresql数据库

    1.公司使用的Greenplum和Postgresql,确实让我学到不少东西.简单将使用jdbc连接Greenplum和Postgresql数据库.由于使用maven仓库,不能下载Greenplum的 ...

  3. 通过数据库评估存储设备IO性能-Oracle11gIO校准功能介绍

    通过数据库评估存储设备IO性能 ---------Oracle11g IO校准功能介绍 前言 I/O子系统是ORACLE数据库的一个重要组成部分,因为I/O操作是贯穿数据库管理全过程,它操作的对象包括 ...

  4. Oracle数据库使用Analyze提升sql性能

    Oracle数据库使用Analyze提升sql性能 如果你不使用analyze完成sql优化,将意味着:你拒绝使用数据库的查询优化器,也失去了使用优化连接的机会.假设你创建了一张拥有100万条记录的临 ...

  5. CPU性能PK

    CPU性能PK AMD vs Intel 2020: Who Makes the Best CPUs? 英文原文链接:https://www.tomshardware.com/features/amd ...

  6. 比较3个开源数据库:PostgreSQL,MariaDB和SQLite

    在现代企业技术世界里,开源软件已牢固地确立了自己作为不可忽视的,最大力量之一的地位.由于开源运动的出现,推动了几十年来的一些最著名的技术发展. 不难理解为什么:尽管基于Linux的开源网络标准可能不像 ...

  7. 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...

  8. PostgreSQL 参数调整(性能优化)

    昨天分别在外网和无外网环境下安装PostgreSQL,有外网环境下安装的相当顺利.但是在无外网环境下就是两个不同的概念了,可谓十有八折.感兴趣的同学可以搭建一下. PostgreSQL安装完成后第一件 ...

  9. 什么是云数据库RDS PostgreSQL 版

    PostgreSQL被业界誉为“最先进的开源数据库”,面向企业复杂SQL处理的OLTP在线事务处理场景,支持NoSQL数据类型(JSON/XML/hstore).支持GIS地理信息处理. 优点 NoS ...

随机推荐

  1. python 的面相对象编程--对应c++

    在python的面相对象编程中,我们常常在class中可以看到a(),  _b() ,  __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...

  2. vector容器用法详解

    vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着ve ...

  3. C++标准库之右值引用与交付语义

    C++标准委员会不应该制定一条阻止程序员拿起枪朝自己的脚丫子开火的规则. 右值引用(rvalue).交付语义(move) 最近阅读<C++标准库第二版>,看到第二章介绍C++11新特性3. ...

  4. 10. Halloween 万圣节

    10. Halloween 万圣节 (1) On October the 31st,across Britain and the USA,thousands of children are dress ...

  5. JS验证码邮件

    js var time = 30; var canSend = true; function f5() { if (canSend) {//判断是否要ajax发送刷新验证码 验证码在后台刷新 //al ...

  6. MFC为多个控件绑定同一个函数

    方式一: afx_msg void OnButtonClick(UINT nID); ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON_1, IDC_BUTTON_XX, ...

  7. Html5与Css3知识点拾遗(八)

    css5新增的元素与属性 表单内元素的属性 1. form属性 之前必须书写在表单内部.而在Html5中,可以放在任何位置,为元素指定一个form属性,属性值为该表单的id,就可以声明该元素属于指定表 ...

  8. django扩展User认证系统

    第一种方法proxy 如果你对Django提供的字段,以及验证的方法都比较满意,没有什么需要改的.但是只是需要在他原有的基础之上增加一些操作的方法.那么建议使用这种方式.示例代码如下: #在model ...

  9. redis复习

    一起学习...

  10. ng 的 ng-repeat(对象) 把对象的 key 和value 都拿出来 循环

    对象的repeat  是这种形式