全方位对比 Postgres 和 MongoDB (2023 版)

如何选择最佳数据库:MongoDB、PostgreSQL或ScyllaDB? 分片是自动执行的,可以随着数据的增长进行无缝扩展。在研究和基准测试这些数据库时,很明显,不同数据库中的许多规格和功能都具有特定的应用。首先,我们建立了一个环境来复制我们的数据采集流程,但我们进行了激进的测试。查询语言:MongoDB使用自定义的查询语言MongoDB Query Language(MQL),受SQL的启发,但有一些差异以匹配面向文档的数据模型。去年,我们面临着将我们的实时机器学习(ML)环境和分析仪表板升级以支持数据吞吐量的大幅增长的挑战,因为我们成功地将客户数据库和数据量扩大了10倍。 阅读详情

本文为「数据库全方位对比系列」第二篇,该系列的首部作品为「全方位对比 Postgres 和 MySQL (2023 版)」

为何对比 Postgres 和 MongoDB

根据 2023 年 Stack Overflow 调研,Postgres 已经成为最受欢迎和渴望的数据库了。

file

MongoDB 曾连续 4 年 (2017 - 2020) 蝉联此头衔。根据 DB-Engines 排名,Postgres 和 MongoDB 都是排名前 5 的数据库。它们两者都在爬楼梯,并且在夺取三大巨头:Oracle, MySQL 和 Microsoft SQL Server 的市场份额。

file

MongoDB 被广泛认为是一种与包括 Postgres 在内的 SQL 数据库相对立的 NoSQL 数据库。但近年来,它们正在趋同:

  • MongoDB 变得更像传统关系型数据库,增加了多文档 ACID 事务,二级索引和高级查询功能。
  • Postgres 不断改进其 JSON 能力,如索引、查询优化和更多操作符,这不禁让人们好奇 MongoDB 是否已经过气。

file

2018 年,The Guardian 写了一篇关于将 MongoDB 迁移到 Postgres 的长文。自此,虽然发生了很多变化,但有一件事没变:迁移数据库是极其痛苦的。

file

因为需要与各种数据库及其衍生产品集成,Bytebase 和各种数据库密切合作,而最大的数据库托管服务 Google Cloud SQL (https://cloud.google.com/sql) 也是 Bytebase 创始人的杰作之一。

根据实操经验,我们对 Postgres 和 MongoDB 在以下几个维度进行了比较:

  • 许可证 License
  • 数据模型 Data Model
  • JSON 支持 JSON Support
  • 性能 Performance
  • 可靠性 Reliability
  • 伸缩性 Scalability
  • 易用性 Usability
  • 可运维性 Operability
  • 生态系统 Ecosystem

除非另有说明,下文基于最新的主要版本 Postgres 15 和 MongoDB 6。在文章中,我们使用 Postgres 而不是 PostgreSQL,虽然 PostgreSQL 才是官方名称,但被认为是 Postgres 史上最错误的决定。

许可证 License

  • Postgres 发布在 PostgreSQL 许可下,是一种类似于 BSD 或 MIT 的自由开源许可。
  • MongoDB 社区版采用由 MongoDB 公司自行创建的 Server Side Public License (SSPL) 发布,以防止他人提供竞争性的 MongoDB 服务,MongoDB 公司还根据要求提供商业许可证。

大多数公司使用数据库来支持其内部基础设施,Postgres 和 MongoDB 都允许此类使用。

数据模型 Data Model

  • Postgres 是关系型数据库,它将数据存储在预先定义好的列中,并通过使用外键来建立表之间的关系。
  • MongoDB 是面向文档的数据库,这意味着数据以文档形式存储在集合中。每个文档都是一个类似 JSON 的结构,可以包含嵌套字段和数组。MongoDB 专为处理非结构化和半结构化数据而设计。

file

Postgres 也支持 JSON 列,因此可以像使用 MongoDB 一样使用 Postgres,将表定义为:

CREATE TABLE my_collection (
   id SERIAL PRIMARY KEY,
   data JSONB
);

JSON 支持 JSON Support

MongoDB 和 Postgres 都非常擅长处理 JSON。MongoDB 使用自己发明的 BSON 格式存储 JSON,而 Postgres 使用 JSONB 格式。如果有兴趣,可以看下这个关于选择在 Postgres 中使用 BSON 还是 JSONB 之间的讨论:https://bit.ly/3pRLOzi。

MongoDB 有两个优点:

  • 内置 schema 验证器。
  • 与 Node.js / 前端生态系统的集成。MongoDB 是全栈开发人员常用的选择,他们通常会使用 Node 进行开发。

性能 Performance

性能主要由访问模式决定。如果一个操作涉及不同的实体,MongoDB 通常更快,因为数据是 denormalized 的,并且不需要在表之间进行复杂的连接操作。另一方面,Postgres 能处理复杂查询,这得益于 SQL 和其先进的查询优化器。

可靠性 Reliability

MongoDB 在早期因为不支持 ACID 事务而被认为是不太靠谱的。不过自从他们收购了 WiredTiger 并使用其 WiredTiger 存储引擎后,就不一样了。从事务角度来看,如今的 MongoDB 和 Postgres 一样稳定可靠。

MongoDB 通过其副本集提供内置的自动 failover 功能。而 Postgres 则需要像类似 pg_auto_failover 的第三方解决方案。

伸缩性 Scalability

MongoDB 可以进行横向扩展 (scale out),而 Postgres 通常则是纵向扩展 (scale up)。

MongoDB 是一个支持自动分片的分布式数据库。对于 Postgres 来说,我们通常会先将单节点的 postgres 进行纵向扩展,并尽可能地推迟使用分片解决方案。当然,对 Postgres 进行分片是可以的:

易用性 Usability

MongoDB 不会事先强制 schema,并且容易上手。在 2010 年,10gen(开发 MongoDB 的公司的原名)发布了官方 MongoDB Node.js 驱动程序的第一个版本,开发人员能轻松地从 Node.js 应用程序与 MongoDB 数据库进行交互。该驱动程序提供了一个简单直观的 API,支持广泛的 MongoDB 功能,包括查询、索引和聚合等。正因为好用,如今,MongoDB 仍是全栈开发人员首选。

作为关系型数据库,Postgres 强制对 schema 进行了约束。而即使在关系型数据库中,Postgres 也比其他产品如 MySQL 更加严格。

file

Stack Overflow 的调查显示,尽管 Postgres 是受访者中最受欢迎的数据库,但 MongoDB 在新手中更受欢迎。

而在处理复杂查询方面,MQL (MongoDB Query Language) 则不如 SQL 强大。

可运维性 Operability

运行多节点的 MongoDB 比运行多节点的 Postgres 更容易,因为分片和 failover 可以由 MongoDB 来处理。不过,如果你在单个节点上分别运行这两个数据库,那么 MongoDB 的分布式特性可能会成为负担。

各种第三方供应商提供了 Postgres 托管服务。MongoDB 的 License 阻止了第三方提供 MongoDB 托管服务,不过他们自己的 MongoDB Atlas 比对应的 Postgres 托管服务更加完善。毕竟,第三方很难击败第一方云服务。

生态系统 Ecosystem

Postgres 有可扩展的架构,并且仍由社区维护。近年来,Postgres 生态系统蓬勃发展,它拥有众多插件,使其能够处理比其他数据库更多样化的任务。而且由于其自由许可证和坚实的架构,在每个应用程序平台提供托管数据库服务时,它们都选择了 Postgres,从早期的 Heroku 到新兴的 Supabase, render 和 Fly.io。

MongoDB 作为市值最高的商业开源企业采取了更商业化的做法。一旦在生态系统中出现了优秀解决方案,MongoDB 公司都会考虑收购以确保其成为整体 MongoDB 产品线不可或缺的一部分。其中一些著名的收购包括:

  • WiredTiger 存储引擎
  • mLab 托管服务
  • Realm 移动端数据同步方案
  • Compass MongoDB GUI 客户端

尽管 Postgres 和 MongoDB 采取了截然不同的方式来培育生态系统,但都取得了巨大成功。

Postgres or MongoDB?

file

在某些领域中,明显一个数据库比另一个更合适:

  • 如果你的应用程序具有复杂的业务逻辑并且需要复杂查询,请选 Postgres。
  • 如果你的应用程序具有简单的数据模型并需要处理海量数据,请选 MongoDB。

然而,大多数应用程序用例介于两者之间,而且两个数据库都非常强大:

  • 作为文档型数据库,MongoDB 提供了一流的 JSON 支持。而 Postgres 在开源关系型数据库中也有着最好的 JSON 支持。
  • 对于全栈开发人员来说,MongoDB 曾经是首选,因为它与 Node.js 完美集成。而随着主要第三方应用平台都提供托管 Postgres 服务,Postgres 则变得愈发有吸引力。
  • 对于后端开发人员来说,在添加事务支持后,MongoDB 变得更加诱人了。谁不想避免繁琐的 schema 更改并享受更快速的迭代呢?
  • MongoDB Atlas 构建了最精细化的托管数据库服务之一;而各种大小第三方供应商则都提供了出色的 Postgres 托管解决方案。

总体而言,Postgres 是一个更通用的数据库,它采用关系模型、提供全面 SQL 功能、具备可扩展架构,并由一个热情洋溢的社区推动。

MongoDB 是一个全面的数据库解决方案,它普及了文档模型、内置了伸缩性和高可用性,提供了完整的开发者体验,并由一个敏锐的营利性商业实体推动着。

如果在 Postgres 和 MySQL 之间做选择很困难,那么在 Postgres 和 MongoDB 之间选择也不容易。而且随着两个数据库都朝着更强的方向发展,选择只会变得越来越困难。

最后,在一个组织内部 Postgres 和 MongoDB 共存也是很常见的情况。如果需要同时管理 Postgres 和 MongoDB 的开发生命周期,可以来了解一下 Bytebase。

file


💡 你可以访问官网,免费注册云账号,立即体验 Bytebase。

为什么 PostgreSQL 能代替 MongoDB? 在进行技术选型时,需要考虑众多因素,如功能、性能、可靠性、成本效益、社区支持和团队技术能力等,然而,影响最终决定的关键因素的往往是团队 Leader 的技术品味,这也能解释为什么阿里偏爱 Java,而字节跳动更倾向 Go、Rust 等新兴语言。技术本身无好坏之分,根据实际业务问题选择适当的技术方案是关键。 本文旨在为读者提供一种新的选择,而非论证 PostgreSQL 比 MongoDB 更优秀。 阅读详情

相关推荐

PostgreSQL跨库查询实战:postgres_fdw原理、配置与性能优化

在数据库架构设计中,跨库查询是解决数据分散访问需求的关键技术。其核心原理是通过外部数据包装器(FDW)建立统一的数据访问接口,实现透明化的远程数据操作。这项技术的核心价值在于能够在不迁移数据的前提下,实现多数据源的关联分析与实时查询,极大提升了数据整合的灵活性与开发效率。在PostgreSQL生态中,postgres_fdw作为官方维护的外部数据包装器,通过谓词下推、连接复用等机制,为跨库JOIN、聚合计算等复杂场景提供了稳定支持。无论是微服务架构下的数据聚合,还是分布式系统中的实时报表生成,掌握postg

weixin_33826609的博客 405

Postgresql和Mongodb对比

项目 MongoDB Postgres 主要用途 不需要数据一致性和完整性的大数据量和高速度的大数据 享有规范化类型,联接,数据约束和事务支持的事务应用程序。 商业逻辑 跨应用程序分布 集中触发程序 轻松与数据存储集成 没有 外部数据包装器可与Oracle,MySQL,MongoDB,CouchDB,Redis,Neo4j,Twitter,LDAP,文件,Hadoop等集成。 服务器端编程 没有 几种过程语言,例如Python,JavaScript,C,C ++,Tcl,Perl...

小汤圆 4511

时空数据处理实战:从PostGIS到MongoDB的建模、索引与查询优化

时空数据是记录事件发生位置与时间的关键数据类型,广泛应用于物联网、社交分析和商业智能等领域。其核心原理在于将地理位置(点、线、面)与时间戳进行有效关联和编码,以实现高效的联合查询与分析。这项技术的核心价值在于能够从海量数据中快速洞察特定区域在特定时间内的模式与趋势,例如分析城市热点区域的客流变化或追踪物流车辆的实时轨迹。在应用场景上,无论是电商平台的区域销售分析、社交媒体的地理位置打卡统计,还是智慧城市的传感器网络监控,都离不开对时空数据的建模与处理。本文以“北海道-札幌某日”这一典型时空查询需求为切入点,

axfcjwkbi259888707的博客 335

MongoDB与PostgreSQL两个数据库的特点详细对比

MongoDB和PostgreSQL是两种不同类型的数据库,分别属于NoSQL(文档型)和关系型(SQL)数据库。MongoDB以其灵活的数据模型、高写入吞吐和水平扩展能力著称,适合处理非结构化数据和快速迭代开发。PostgreSQL则以其严格的ACID事务支持、复杂SQL查询能力和结构化数据管理见长,适用于需要强一致性和复杂关系的场景。两者在查询语言、事务支持、扩展性和高级功能(如地理空间数据处理)方面各有优势。选择时需根据业务需求权衡灵活性、一致性、扩展性和开发效率。混合使用场景下,MongoDB和Po

yuanpan的专栏 2872

MySQL 8.0 与 PostgreSQL 16 对比:5大核心差异与选型决策指南

本文深度对比MySQL 8.0与PostgreSQL 16在架构设计、性能优化、高级功能、运维生态和成本模型等五大核心差异,为架构师提供实用的选型决策指南。通过实际案例和性能测试数据,帮助开发者根据业务需求选择最适合的数据库解决方案,提升系统扩展性和效率。

350

MongoDB 和 PostgreSQL 性能比较

随着互联网应用的普及,数据量越来越大,处理数据的需求也越来越强烈。数据量的爆炸性增长促使各种数据库系统应运而生。目前,基于关系型数据库管理系统(RDBMS)的产品如 Oracle、MySQL等已经成为最主要的选择,但在实际生产环境中,存在性能问题,如读写延迟过高、查询效率低下、索引失效等。另外,NoSQL数据库系统如MongoDB、Cassandra等发展得相对较快,其优点是支持动态schema、高扩展性、自动分片等。

AI天才研究院 2694

如何用Supabase Wrappers创建你的第一个Postgres FDW:HelloWorld示例详解

Supabase Wrappers是一个强大的Postgres Foreign Data Wrapper (FDW) 开发框架,用Rust语言编写,让开发者能够轻松构建连接Postgres与外部数据源的桥梁。通过本教程,你将快速掌握使用Supabase Wrappers创建HelloWorld FDW的完整流程,开启Postgres数据集成之旅。 ## 什么是Postgres FDW?为什么选择

gitblog_00910的博客 450

9.Vue前端使用iframe集成帆软报表的单点登录

CPT普通报表的地址:【帆软的服务http】+【/webroot/decision/view/report?【帆软的服务http】+【/webroot/decision/view/form?// fineReportHttp:帆软部署的地址。//如果为ie浏览器则页面加载完成后立即执行。// fineLinkSrc:帆软报表的url。//其他浏览器则重新加载onload事件。// 拿到配置的帆软报表的地址参数。//判断是否为ie浏览器。// 帆软报表登录和打开。// 帆软报表登录和打开。

qq_27860623的博客 4650

FerretDB 0.8.0 Beta 版深度解读:PostgreSQL 认证机制、`$min` 更新操作符与迁移实战

FerretDB 是一个开源的 MongoDB 替代品,其核心思路是把 MongoDB 协议查询翻译成 SQL,以 PostgreSQL 作为底层数据库引擎。本文以 FerretDB 0.8.0 Beta 版发布为切入点,系统讲解本次引入的 PostgreSQL 认证能力、`$min`/`$max` 更新操作符、`ordered` 插入等新特性,并结合仓库源码与当前 [认证文档](https://

gitblog_01156的博客 350

Orange Pi 3B+刷入EmuELEC全过程:手把手教程

手把手教你如何在Orange Pi 3B+上成功刷入emuelec系统,涵盖烧录工具、镜像下载到启动设置的完整流程,让复古游戏体验轻松实现。

weixin_35732273的博客 1096

高德地图+Three.js实战:手把手教你打造数字农场3D可视化大屏(附完整源码)

本文详细介绍了如何利用高德地图JS API与Three.js技术栈,构建一个功能强大的数字农场3D可视化大屏。文章从技术选型、架构设计出发,深入讲解了坐标对齐、图层管理、性能优化等核心工程实践,并提供了完整的模块化代码示例,旨在为智慧农业及类似场景的3D地理可视化项目提供一套可复用的解决方案。

k8s6orchestrator的博客 890

临时工说: 抽彩票式回顾数据库2023年数据库世界新闻(非国内)

还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内,可以解决你的问题。加群请联系 liuaustin3 ,(共1790人左右 1 + 2 + 3 + 4 +5) 4群(300+ 到350将关闭自由申请),另欢迎 OpenGauss 的技术人员加入。临时工一年不容...

sql server的专栏 1110

ESP32-CAM图传小车:端边协同的嵌入式视觉系统设计

在物联网边缘智能场景中,嵌入式视觉系统需平衡实时性、算力与成本。其核心在于理解图像采集、硬件编码、低延迟传输与分层计算的基本原理——OV2640等CMOS传感器配合JPEG硬件编码可显著降低主控负载;TCP流式协议比HTTP/RTSP更适配资源受限MCU;而‘计算卸载’架构将OpenCV等重负载移至Android端,使ESP32专注实时控制与传输,既发挥FreeRTOS任务调度优势,又规避了PSRAM带宽与内存瓶颈。该模式广泛适用于教育机器人、智能巡检及DIY视觉终端等场景,本文以WiFi图传坦克小车为载体

weixin_42524864的博客 374

RxDB 作为 PowerSync 替代方案:面向 JavaScript 本地优先应用的数据库选型与落地指南

PowerSync 在"服务端已有 Postgres 或 MongoDB、想要托管同步引擎"的场景下很有吸引力,但对 JavaScript 团队而言,实际体验更为复杂:浏览器端客户端运行在 WASM SQLite 之上,读写都叠加了额外延迟;FSL 源码可用许可证对"交付竞品"有严格限制;服务端权威模型也几乎不给自定义后端或非 SQL 查询层留出空间。RxDB 走的是另一条路——它是存储无关的本地

gitblog_00634的博客 263

VIPER22A实战:从零搭建15W非隔离电源,附BUCK电路调试心得

本文详细介绍了使用VIPER22A芯片从零搭建15W非隔离电源的全流程,重点解析BUCK电路设计与调试技巧。通过核心参数计算、PCB布局优化和效率提升方案,帮助工程师快速掌握DC-DC电源设计要点,实现高效稳定的电源转换。

redis7keeper的博客 671

Atlas 300I Duo - vllm部署Qwen3-VL-8B-Instruct

本文介绍了在Ascend NPU环境下部署Qwen3-VL-8B大语言模型的步骤。主要包括:1)安装驱动、docker和vllm镜像;2)创建特权容器并挂载设备与目录;3)进入容器安装指定版本的transformers;4)设置环境变量和NPU卡配置;5)启动vllm服务;6)测试API接口。部署过程涉及多块NPU卡的使用,需注意内存碎片化问题,最终通过vllm框架提供模型推理服务。

m0_50105717的博客 1562

零停机迁移MongoDB到FerretDB:从数据同步到应用集成实战指南

企业数据架构的灵活性与成本控制正面临前所未有的挑战,MongoDB的SSPL许可证变更让众多团队开始寻求真正开源的替代方案。FerretDB作为PostgreSQL生态下的MongoDB兼容层,通过将文档数据存储为JSONB格式,既保留了NoSQL的开发体验,又继承了PostgreSQL的稳定性与生态优势。本文将通过两个真实迁移场景,详解如何使用传统工具链与现代同步技术实现零停机迁移,并提供完整的...

gitblog_01178的博客 421

手把手教你学Simulink--单相逆变器模糊逻辑控制策略仿真

本文介绍了在Simulink中设计单相逆变器模糊逻辑控制策略的完整流程。主要包括:1)构建单相逆变器模型;2)使用FuzzyLogicToolbox设计模糊控制器,定义输入输出变量和模糊规则;3)将控制器集成到Simulink模型;4)添加干扰源和示波器;5)配置仿真参数并分析结果。该方法利用模糊控制处理非线性系统的优势,可实现输出电压的精确跟踪,具有良好的鲁棒性。文中提供了详细的步骤说明和示例代码,强调准确设计隶属函数和规则库对控制性能的关键作用。该仿真设计为电力电子控制系统的开发提供了有效支持。

MHD0815的博客 202

FerretDB 0.6.1 发布详解:`$max` 更新操作符、`_id` 查询下推与可配置遥测服务

本篇技术指南基于 FerretDB 0.6.1 发布公告(见 [原文档](https://link.gitcode.com/i/70226f15d2b30a61812ed96583411d62)),结合当前仓库源码与文档,系统梳理该版本引入的三大核心能力——`$max` 字段更新操作符、针对 `{_id: ObjectId()}` 查询的 PostgreSQL 下推优化、以及基于 Kong 的统一

gitblog_00404的博客 1047

图神经网络实战(21)——图神经网络的可解释性

在本节中,我们探讨了应用于图神经网络 (Graph Neural Networks, GNN) 的可解释性人工智能 (Explainable Artificial Intelligence, XAI) 技术。可解释性是许多领域的关键要素,可以帮助我们建立更好的模型。我们介绍了不同的局部解释技术,并重点讨论了 GNNExplainer (基于扰动的方法),在图分类任务中应用 GNNExplainer。

盼小辉丶的博客 9581

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

CentOS 7安装PostgreSQL 15保姆级教程:从源码编译到远程连接实战

数据库服务是企业应用的基础设施,PostgreSQL作为功能强大的开源关系型数据库,凭借其稳定性和扩展性,正被越来越多的团队采用。在Linux服务器上部署数据库,通常有RPM包安装、源码编译与Docker容器等多种方式,其中通过官方Yum源安装最符合生产环境的维护需求。安装过程中,初始化数据库集群、配置监听地址与pg_hba.conf认证规则、处理防火墙与SELinux策略,是决定数据库能否被远程访问的关键环节。对于运行CentOS 7的存量服务器而言,一套清晰的部署流程可以规避依赖源失效、认证方式不兼容等

weixin_34008805的博客 330

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ID-based RAG FastAPI多模型支持:OpenAI、Azure、Hugging Face等7种嵌入模型配置指南

ID-based RAG FastAPI是一个基于FastAPI和Langchain构建的检索增强生成(RAG)框架,专为文档索引和检索设计。该项目最大的亮点之一就是其强大的多模型支持能力,可以无缝集成7种不同的嵌入模型提供商,让开发者能够根据具体需求灵活选择最适合的嵌入服务。无论您是需要商业级的OpenAI和Azure服务,还是希望使用开源的Hugging Face模型,甚至是本地部署的Olla

gitblog_00372的博客 1064

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

PostgreSQL入门与实践

PostgreSQL是一款功能强大的开源关系数据库,支持完整的SQL标准并提供了丰富的扩展功能。本文摘要介绍了PostgreSQL的基础知识,包括SQL语言概述(DDL和DML操作)、执行流程,以及与MySQL、MongoDB的对比分析。重点阐述了PostgreSQL的数据类型系统,涵盖数值、字符、日期时间等基本类型,以及数组、JSONB等高级类型。通过代码示例展示了表创建、数据操作等典型用法,并比较了不同数据库的适用场景,为开发者选择合适的数据存储方案提供了实用建议。

在所有的事情背后,要有一颗坚定的的本心,要有一颗应对变革和提升自我的本心,世界瞬息万变,本心要坚持到底,保持学习,时刻复盘 1367

彻底读懂Fable-5.1-Max-Reasoning-Filtered-5000x:5k与10k数据集结构、字段与统计指标全解析

Fable-5.1-Max-Reasoning-Filtered-5000x 是首个公开的 **Fable 5.1 最大推理强度(max reasoning effort)蒸馏数据集**,包含 5,000 条高质量多轮 Agentic Coding 推理轨迹(5k 版)与一个实验性 10K 完整集(10k 版),是用于 SFT(监督微调)、思维链(CoT)蒸馏和工具调用(tool-use)训练的高

gitblog_00496的博客 183

ServerPackCreator 版本演进全解析:从单体 Java 工具到多模块 Mod 服务器整合平台

> ServerPackCreator 是一个将 Minecraft Forge、NeoForge、Fabric、LegacyFabric、Quilt 模组包自动打包为可直接运行的服务器整合包的开源工具。本文以仓库根目录 [CHANGELOG.md](https://link.gitcode.com/i/77215e52bc90cbc11936d8d114074bb3) 的完整版本记录为主线,梳理

gitblog_00841的博客 632

docker常用命令

常用docker镜像postgresredisrabbitmq postgres docker run --name postgres -d -e POSTGRES_PASSWORD=123456 --restart=always -p 5432:5432 postgres redis docker run --name redis -d --restart=always -p 6379:637...

Qbit编程学习笔记 646
上一篇: 最佳 Postgres 插件(2023 版)
下一篇: 如何安装 MySQL 客户端 - Mac, Ubuntu, CentOS 或 Windows
Bytebase
博客等级 码龄5年 1348粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值