postgis mysql sqlite mongodb速度对比

2023-10-27

前言: 最近做了一下几个数据库之间的速度对比,最后的结果还挺出人意料的,特此记录一下。

本文使用的是同一份数据,分别存储到了postgis、mysql、sqlite和mongodb中,数据共70万左右,数据量并不大,只是为了满足测试。

postgis、mysql、sqlite都是关系型数据库,我们来看下表结构:
在这里插入图片描述
再来看下mongodb中的数据结构:
在这里插入图片描述
本文使用的是SSM(Spring+SpringMVC +MyBatis)架构,因为本人不会在MyBatis中配置mongodb,所以只配置了postgis、mysql、sqlite的环境参数:

<environments default="mysql">
        <!-- 数据库环境 -->
        <environment id="postgis">
            <!-- 使用JDBC使用管理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据源配置 -->
            <dataSource type="POOLED">
                <property name="driver" value="${postgis.driver}"/>
                <property name="url" value="${postgis.url}"/>
                <property name="username" value="${postgis.username}"/>
                <property name="password" value="${postgis.password}"/>
            </dataSource>
        </environment>
        <!-- 数据库环境 -->
        <environment id="mysql">
            <!-- 使用JDBC使用管理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据源配置 -->
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
        <!-- 数据库环境 -->
        <environment id="sqlite">
            <!-- 使用JDBC使用管理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据源配置 -->
            <dataSource type="POOLED">
                <property name="driver" value="${sqlite.driver}"/>
                <property name="url" value="${sqlite.url}"/>
                <property name="username" value=""/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

mongodb的数据库连接是直接从代码中读取配置文件以后进行的:

String resource=this.getClass().getClassLoader().getResource("/").getPath()+"mongodb.properties";
InputStream inStream = new FileInputStream(new File(resource));
Properties properties = new Properties();
properties.load(inStream);
String host=properties.getProperty("host");
String port=properties.getProperty("port");
String database=properties.getProperty("database");
String table=properties.getProperty("table");
MongoClient mongoClient = new MongoClient( host , Integer.parseInt(port) );
MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
MongoCollection<Document> collection = mongoDatabase.getCollection(table);
long startTime = System.currentTimeMillis(); //获取开始时间
MongoCursor<Document> iterator = collection.find().iterator();
long endTime = System.currentTimeMillis(); //获取结束时间
infoLogger.info("从mongodb中读取数据共用时"+(endTime-startTime)+"ms");

然后分别统计查询1、100、1000、10000、100000、700000条数据的时间,如下所示:
在这里插入图片描述

其中mongodb的时间有一些问题,因为我在查询的时候发现最多只能查出来500多条,具体原因未找到,如果有人知道的话,烦请告诉我一下,谢谢。
从上面的表格来看,sqlite是关系型数据库中最快的,紧接着是postgis,出乎我的意料。

总结: 本文对比了几种数据库的查询速度,数据量并不大,只能说明一小部分问题,感兴趣的同学可以进行更深入的测试,不对之处欢迎指正,回见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

postgis mysql sqlite mongodb速度对比 的相关文章

  • Sql:计算随时间的增长

    我几周前发布了这个问题 但我认为我没有清楚地提出这个问题 因为我得到的答案不是我想要的 我认为最好重新开始 我正在尝试查询数据库以检索一段时间内唯一条目的数量 数据看起来像这样 Day UserID 1 A 1 B 2 B 3 A 4 B
  • MongoDB:仅获取过去 24 小时内创建的文档?

    我想限制我所做的查询仅查看过去 24 小时内创建的文档 构造此查询的最佳方式是什么 如何根据日期进行限制 Add createdAt字段 索引它 然后查询 db getCollection COLLECTION NAME find crea
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • 我可以在一个查询中更新/选择表吗?

    我需要在查看页面时选择数据并更新 视图 列 有没有一种方法可以在一个查询中执行此操作 或者我是否必须使用不同的查询 如果您不想 不需要使用事务 则可以创建一个存储过程 该过程首先更新视图计数 然后选择值并将其返回给用户
  • 在 PHP 中将十进制/双精度/浮点值与 PDO 绑定的最佳方法是什么?

    看来类常量只涵盖PDO PARAM BOOL PDO PARAM INT and PDO PARAM STR用于绑定 您只是将十进制 浮点 双精度值绑定为字符串还是有更好的方法来处理它们 MySQLi 允许使用 d 类型表示 double
  • 如何解决 MySQL innodb 在 TRUNCATE TABLE 上“等待表元数据锁”?

    在 GitLab CI 服务器中运行包含数百个应用程序单元测试的测试套件 运行 10 次测试后 不知怎的 它总是卡在等待 TRUNCATE TABLE 上的表元数据锁上 这是一个拆卸步骤 我知道SHOW ENGINE INNODB STAT
  • 通过将行旋转为动态数量的列来在 MySQL 中创建摘要视图

    我在 MySQL 中有一个表 其中包含以下字段 id company name year state 同一客户和年份有多行 以下是数据示例 id company name year state 1 companyA 2008 1 2 com
  • 在 MySQL 数据库上使用版本控制 (Git)

    我是一名 WordPress 设计师 开发人员 越来越多地使用版本控制 特别是 Git 尽管我确实在某些项目中使用 SVN 我目前正在使用 Beanstalk 作为我的远程仓库 将所有 WordPress 文件添加到我的存储库中是没有问题的
  • MongoDB 查询 IN 对象数组

    我在检索两个集合之间的信息时遇到问题 第一个集合存储员工信息 id ObjectId 4f9643967f8b9a3f0a00005a birth date 1963 09 09 departments departments id Obj
  • 如何在android中批量插入sqlite

    我正在使用 SQLiteOpenHelper 进行数据插入 我需要插入2500个id和2500个名字 所以花费了太多时间 请任何人帮助我如何减少插入时间 我们可以一次插入多条记录吗 任何人都可以帮助我 先感谢您 代码 public clas
  • cv2.imdecode 始终返回 None

    我正在从存储 JPEG 图像的 sqlite BLOB 读取二进制数据 sqlite3 Binary 图像被写入数据库 img cv2 imread images image jpg c execute INSERT INTO pictur
  • 如何在Android中访问现有的sqlite数据库?

    到目前为止 我们已经在 Android 中开发了在运行时创建数据库的应用程序 我们想知道如何在 Android 应用程序中访问预构建或现有的数据库 sqlite 文件 请提供详细信息 查看文档android database sqlite
  • MYSql 前 10 名及其他总计

    我的查询运行良好 但我只需要前 10 个供应商 然后我需要将所有剩余的总计放在 所有其他 行中 如果没有单独的查询 我该如何做到这一点LIMIT 10 18446744073709551615 SELECT VENDOR fullname
  • MongoDB 查询数组以获取精确的元素匹配,但可能是无序的

    我在 MongoDB 中有一个文档 如下所示 users 2 3 4 我尝试通过匹配用户数组来查询该文档 db things find users all 2 3 4 该查询有效 但也会返回此文档 users 2 3 4 5 最后一个要求是
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • MySQL:空间查询查找纬度/经度点是否位于给定边界内

    我正在研究谷歌地图搜索功能 其目的是找出 地理位置 点是否位于多边形内 如下图所示 我使用带有 Spatial 扩展的 mysql 5 6 20 我知道它内置有用的几何函数 因此我可以直接从数据库查询地理编码位置 我的目的是熟悉地理空间函数
  • PHP + MySQL 队列

    我需要一个充当队列的简单表 我的 MySQL 服务器限制是我不能使用 InnoDB 表 只能使用 MyISAM 客户 工人将同时工作 他们每次都需要接受不同的工作 我的想法是执行以下操作 伪代码 job lt SELECT FROM que
  • 如何在 MySQL 中创建查询以根据日期和独特字段减去连续行?

    基于SQL根据日期和另一列减去两行 https stackoverflow com questions 12310221 sql subtract two rows based on date and another column我有一个好
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • MySQL 中的 group_concat 性能问题

    我添加了一个group concat到一个查询并杀死了性能 添加之前和之后的解释计划是相同的 所以我对如何优化它感到困惑 这是查询的简化版本 SELECT curRow curRow 1 AS row number docID docTyp

随机推荐

  • 演讲者模式投影到幕布也看到备注_ppt备注怎么用在放映时怎么可以不在投影仪上显示...

    ppt备注怎么用在放映时怎么可以不在投影仪上显示 时间 2013 08 30 作者 snow 来源 互联网 我们在做投影展示的时候 会将电脑的内容给完全的显示到投影机上面 而如果你设置了备注页的话 那么你编写的备注里面的内容就只能自己 演示
  • 使用JConsole远程监控elasticsearch

    ES虽然有Bigdesk插件进行监控 但是JVM调优的时候 还是习惯了用JConsole监控 ES的JVM参数 可以在elasticsearch servicewrapper插件的elasticsearch conf配置文件里很方便的设置
  • double和int区别

    double所占存储空间更大 8字节 所以能表示的值的范围更大 int 四个字节 表示的范围是 int带符号 整数 1的原码为 0000 0000 0000 0000 0000 0000 0000 0001 2147483647原码为 01
  • Chrome插件:浏览器后台与页面间通信

    content js 与 background js和popup js 通信和 background js与popup js 这些通信都用 chrome runtime sendMessage 这个方法 background js和popu
  • 发送时延和传播时延计算

    一 时延计算公式 发送时延 传输时延 数据块长度 比特 带宽 带宽或发送速率或数据传输速率 比特 每秒 传播时延 距离 米 信号转播速率 米 每秒 二 换算公式 1kb 103bit 1Mb 106bit 1Gb 109bit 1s 106
  • Tomcat常见报错

    eclipse启动服务器部署项目之后 中间修改了一部分代码 导致eclipse卡死了 毫无反应 无奈之下 只好通过任务管理器关闭eclipse 但是重新打开之后 报错无法启动Tomcat 大致报错如下 Several ports 8005
  • AutoGPT 全功能API 接入指南 (云记忆、联网、语音朗读、图像生成)

    ChatGPT狂飙160天 世界已经不是之前的样子 新建了人工智能中文站https ai weoknow com 每天给大家更新可用的国内可用chatGPT资源 一 核心OpenAI API key 必备 点击 Create new sec
  • (二)移动端 Web 开发进阶

    文章目录 一 移动端事件 1 事件 2 移动端事件 1 touch 事件 2 touch 事件的 event 对象 3 其他触摸事件 二 移动端常见问题 1 浏览器兼容性 1 HTML5
  • 机械革命极光pro的win11进行更新后,双系统ubuntu开机选择界面消失的解决方法

    笔者为了学习 按照网上教程安装好了linux内核的第二操作系统ubuntu 一开始开机能够正常进入ubuntu双系统引导界面 但在一次进入windows之后 重启就无法进入ubuntu双系统选择界面了 如果使用ubuntu安装盘 在bios
  • JRE的下载安装

    一 JRE的下载地址 Java Downloads Oracle 二 选择要下载的版本 三 第一次登录需要注册 四 注册并下载 五 按流程安装 双击打开安装包 更改安装位置 建议把C盘改成D盘 选择下一步 等待安装完成 六 配置JRE的环境
  • Spyder可在线使用!?

    不同安装 如果想使用spyder进行编程 可以用其在线版 和本地版功能一样 就是有点慢 另外需要用chrome浏览器 用火狐没法正常访问 Spyder可以在线使用 所以在没有安装python环境的电脑上 想编写python代码 可以尝一下这
  • npm和yarn安装与更换国内源地址

    安装 https classic yarnpkg com en docs install windows stable 查询与更换源 yarn config get registry 国内淘宝源 yarn config set regist
  • mongoDB如何复制collection里的数据到另一个collection方法总结

    mongoDB的可以直接复制数据库 但是对于数据库里的表却没有直接的复制语句 在项目中遇到数据放错collection了情况就很棘手 现在将方法总结如下 1 利用foreach方法在shell里直接运行 db test 复制源表 find
  • 【每日一题】跳跃游戏 (来源leetcode 55)

    给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例 1 输入 nums 2 3 1 1 4 输出 true 解释 可以先跳 1 步 从下标 0
  • 如何定位Unity死循环导致的完全卡死

    1 如何定位Unity死循环导致的完全卡死 2 如何设定Unity AssetBundle单个包大小 3 MaterialPropertyBlock修改Stencil相关参数 4 线性空间中动作文件控制材质球颜色失真问题 5 DrawMes
  • Auto-Encoding Variational Bayes (VAE原文)、变分推理

    变分自动编码器大致概念已经理解了快一年多了 用Pytorch写个模型也是手到擒来的事 但由于其数学原理还是没有搞懂 在看到相关的变体时 总会被数学公式卡住 这对搞学术是致命的 下决心搞懂后 在此记录下我的理解 公式推导 变分下界 这篇文章提
  • iphone 计算机的shift键在哪,苹果电脑shift是哪个键 苹果电脑shift是什么键

    苹果电脑的Shift键在fn键的上方 caps lock键的下方 位于键盘最左侧 由右下往上数第2个键 shift键作用如下 Ctrl Shift键可以用来切换输入法 用Shift Space空格键可以在中文输入状态的半角与全角之间快速切换
  • 人工智能学习笔记——可视化库Seaborn

    import seaborn as snsimport numpy as npimport pandas as pdimport matplotlib pyplot as plt matplotlib inline 写完代码直接把图显示在画
  • IAR代码界面配色和字体修改

    IAR代码界面配色和字体修改 IAR编写代码的界面实在让人难以恭维 所以就自己改了一下编写代码的界面 让写代码变的没那么难受 效果图 打开IAR 点开tools中的options一栏 配置editor中的属性 设置配色方案 展开编辑中col
  • postgis mysql sqlite mongodb速度对比

    前言 最近做了一下几个数据库之间的速度对比 最后的结果还挺出人意料的 特此记录一下 本文使用的是同一份数据 分别存储到了postgis mysql sqlite和mongodb中 数据共70万左右 数据量并不大 只是为了满足测试 postg