HBasevs.MongoDBvs.MySQLvs.Oraclevs.Redis,三大主流开源NoSQL数据库的PK两大_MySQL
类别 | HBase | MongoDB | MySQL | Oracle | Redis |
---|---|---|---|---|---|
描述 | 基于 Apache Hadoop 并提供 BigTable 能力的列存储 | 最受欢迎的文档存储数据库之一 | 广泛使用的开源 RDBMS | 广泛使用的 RDBMS | 内存中的数据结构存储,被用作数据库,缓存以及消息中间件 |
普及度等级(参考下文的趋势图) | 15 级(59.03 分) | 4 级(300.57 分) | 2 级(1277.75 分) | 1 级(1463.37 分) | 10 级(100.65 分) |
数据库模型 | 列存储 | 文档存储 | 关系数据库系统 | 关系数据库系统 | 键-值存储 |
官网 | hbase.apache.org | www.mongodb.org | www.mysql.com | www.oracle.com/-us/-products/-database | redis.io |
技术文档 | hbase.apache.org | docs.mongodb.org/-manual | dev.mysql.com/-doc | www.oracle.com/-technetwork/-indexes/-documentation/-index.html | redis.io/-documentation |
开发者 | Apache 软件基金会 | MongoDB 公司 | Oracle | Oracle | Salvatore Sanfilippo(Redis 之父) |
首次发行 | 2008 | 2009 | 1995 | 1980 | 2009 |
当前版本 | 1.1.0.1,2015 年 5 月 | 3.0.5,2015 年 7 月 | 5.6.26,2015 年 7 月 | 12 Release 1 (12.1.0.2),2014 年 7 月 | 3.0.3,2015 年 6 月 |
许可 | 开源 | 开源 | 开源 | 商业 | 开源 |
是否数据库即服务(DBaaS) | 否 | 否 | 否 | 否 | 否 |
实现语言 | Java | C++ | C 和 C++ | C 和 C++ | C |
服务器操作系统 | Linux Unix Windows |
Linux OS X Solaris Windows |
FreeBSD Linux OS X Solaris Windows |
AIX HP-UX Linux OS X Solaris Windows z/OS |
BSD Linux OS X Windows |
是否结构化数据 | 自由 | 自由 | 是 | 是 | 自由 |
是否预定义数据类型 | 否 | 是 | 是 | 是 | 部分 |
是否支持 XML | 否 | 是 | 是 | 否 | |
是否支持二级索引 | 否 | 是 | 是 | 是 | 否 |
是否支持 SQL | 否 | 否 | 是 | 是 | 否 |
API 以及其他访问方式 | Java API RESTful HTTP API Thrift |
使用 JSON 的专用协议 | ADO.NET JDBC ODBC |
ODP.NET Oracle Call Interface (OCI) JDBC ODBC |
专用协议 |
支持的编程语言 | C C# C++ Groovy Java PHP Python Scala |
Actionscript C C# C++ Clojure ColdFusion D Dart Delphi Erlang Go Groovy Haskell Java JavaScript Lisp Lua MatLab Perl PHP PowerShell Prolog Python R Ruby Scala Smalltalk |
Ada C C# C++ D Eiffel Erlang Haskell Java Objective-C OCaml Perl PHP Python Ruby Scheme Tcl |
C C# C++ Clojure Cobol Eiffel Erlang Fortran Groovy Haskell Java JavaScript Lisp Objective C OCaml Perl PHP Python R Ruby Scala Tcl Visual Basic |
C C# C++ Clojure Crystal D Dart Elixir Erlang Fancy Go Haskell Haxe Java JavaScript (Node.js) Lisp Lua MatLab Objective-C OCaml Perl PHP Prolog Pure Data Python R Rebol Ruby Rust Scala Scheme Smalltalk Tcl |
是否支持服务端脚本 | 是 | JavaScript | 是 | PL/SQL | Lua |
是否支持触发器 | 是 | 否 | 是 | 是 | 否 |
切分方式 | 分片 | 分片 | 水平切分,使用 MySQL Cluster 或者 MySQL Cluster 进行分片 | 水平切分 | 分片 |
主从复制方式 | 多种主从复制机制 | 主-从复制 | 主-主复制 主-从复制 |
主-主复制 主-从复制 |
主-从复制 |
是否支持 MapReduce | 是 | 是 | 否 | 否 | 否 |
分布式场景下数据一致性方法 | 立即一致 | 最终一致 立即一致 |
立即一致 | 最终一致 | |
是否支持外键 | 否 | 否 | 是 | 是 | 否 |
是否支持事务 | 否 | 否 | ACID | ACID | 乐观锁机制,原子性执行的命令块和脚本 |
是否支持并发 | 是 | 是 | 是 | 是 | 是 |
是否支持持久化存储 | 是 | 是 | 是 | 是 | 是 |
是否支持内存存储 | 否 | 是 | 是 | 是 | |
访问控制 | 访问控制列表(ACL) | 基于用户和角色的访问权限 | 细粒度的用户访问权限 | 根据 SQL 标准细粒度的访问权限 | 简单的基于密码的访问控制 |
附录一:普及度等级趋势图
附录二:两张图告诉你如何在 SQL、NewSQL、NoSQL 之间进行取舍
图一:Do I Need SQL or Hadoop?
图二:SQL vs. NewSQL vs. NoSQL
附录三:Redis 之父 Salvatore Sanfilippo 访谈节选
Redis 是一个开源的、高级键值数据库和数据结构服务程序,其中键可以保存字符串、散列、列表、集合和有序集合。Redis 的内核是用标准 ANSI C 写成的,基于一种事件模型。非阻塞复制是 Redis 的设计目标。Redis 中的复制是异步的。目前已经为许多语言(包括大部分常用语言)提供了 Redis 库。C client 是唯一官方支持的包装。Redis Pub/Sub 对实时应用非常适合。Redis 用户有的将它用作数据库,有的用作消息总线,也有的用来做 cache。
附录四:NoSQL 数据库的类型一览表
数据库类型 | 描述 | 主流产品 | 有谁在用 | 适用场景 | 不适用场景 |
---|---|---|---|---|---|
键值(Key-Value)数据库 | 键值数据库就像在传统语言中使用的哈希表。你可以通过 key 来添加、查询或者删除数据,鉴于使用主键访问,所以会获得不错的性能及扩展性。 | Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort | GitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached) | 储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和 ID(键)挂钩,这种情景下键值数据库是个很好的选择。 | 1. 取代通过键查询,而是通过值来查询。Key-Value 数据库中根本没有通过值查询的途径。 2. 需要储存数据之间的关系。在 Key-Value 数据库中不能通过两个或以上的键来关联数据。 3. 事务的支持。在 Key-Value 数据库中故障产生时不可以进行回滚。 |
面向文档(Document-Oriented)数据库 | 面向文档数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用 XML、JSON 或者 JSONB 等多种形式存储。 | MongoDB、CouchDB、RavenDB | SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB) | 1. 日志。企业环境下,每个应用程序都有不同的日志信息。Document-Oriented 数据库并没有固定的模式,所以我们可以使用它储存不同的信息。 2. 分析。鉴于它的弱模式结构,不改变模式下就可以储存不同的度量方法及添加新的度量。 |
在不同的文档上添加事务。Document-Oriented 数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。 |
列存储(Wide Column Store/Column-Family)数据库 | 列存储数据库将数据储存在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个 Person 类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。 | Cassandra、HBase | Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase) | 1. 日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。 2. 博客平台。我们储存每个信息到不同的列族中。举个例子,标签可以储存在一个,类别可以在一个,而文章则在另一个。 |
1. 如果我们需要 ACID 事务。Vassandra 就不支持事务。 2. 原型设计。如果我们分析Cassandra 的数据结构,我们就会发现结构是基于我们期望的数据查询方式而定。在模型设计之初,我们根本不可能去预测它的查询方式,而一旦查询方式改变,我们就必须重新设计列族。 |
图(Graph-Oriented)数据库 | 图数据库允许我们将数据以图的方式储存。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,Steve Jobs、Apple 和 Next,则会有两个“Founded by”的边将 Apple 和 Next 连接到 Steve Jobs。 | Neo4J、Infinite Graph、OrientDB | Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J) | 1. 在一些关系性强的数据中 2. 推荐引擎。如果我们将数据以图的形式表现,那么将会非常有益于推荐的制定 |
不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。 |

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Go 언어는 효율적이고 간결하며 배우기 쉬운 프로그래밍 언어입니다. 동시 프로그래밍과 네트워크 프로그래밍의 장점 때문에 개발자들이 선호합니다. 실제 개발에서 데이터베이스 작업은 필수적인 부분입니다. 이 기사에서는 Go 언어를 사용하여 데이터베이스 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. Go 언어에서는 일반적으로 사용되는 SQL 패키지, Gorm 등과 같은 타사 라이브러리를 사용하여 데이터베이스를 운영합니다. 여기서는 sql 패키지를 예로 들어 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. MySQL 데이터베이스를 사용하고 있다고 가정합니다.

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

HTML은 데이터베이스를 직접 읽을 수 없지만 JavaScript 및 AJAX를 통해 읽을 수 있습니다. 단계에는 데이터베이스 연결 설정, 쿼리 보내기, 응답 처리 및 페이지 업데이트가 포함됩니다. 이 기사에서는 JavaScript, AJAX 및 PHP를 사용하여 MySQL 데이터베이스에서 데이터를 읽는 실제 예제를 제공하고 쿼리 결과를 HTML 페이지에 동적으로 표시하는 방법을 보여줍니다. 이 예제에서는 XMLHttpRequest를 사용하여 데이터베이스 연결을 설정하고 쿼리를 보내고 응답을 처리함으로써 페이지 요소에 데이터를 채우고 데이터베이스를 읽는 HTML 기능을 실현합니다.

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

Go 표준 라이브러리 데이터베이스/sql 패키지를 통해 MySQL, PostgreSQL 또는 SQLite와 같은 원격 데이터베이스에 연결할 수 있습니다. 데이터베이스 연결 정보가 포함된 연결 문자열을 생성합니다. sql.Open() 함수를 사용하여 데이터베이스 연결을 엽니다. SQL 쿼리 및 삽입 작업과 같은 데이터베이스 작업을 수행합니다. 리소스를 해제하기 위해 defer를 사용하여 데이터베이스 연결을 닫습니다.

Golang의 데이터베이스 콜백 기능을 사용하면 다음을 달성할 수 있습니다. 지정된 데이터베이스 작업이 완료된 후 사용자 정의 코드를 실행합니다. 추가 코드를 작성하지 않고도 별도의 함수를 통해 사용자 정의 동작을 추가할 수 있습니다. 삽입, 업데이트, 삭제, 쿼리 작업에 콜백 함수를 사용할 수 있습니다. 콜백 함수를 사용하려면 sql.Exec, sql.QueryRow, sql.Query 함수를 사용해야 합니다.
