検索

NoSQL数据库面面观

Jun 07, 2016 pm 03:41 PM
httpnosqlデータベース

http://www.infoq.com/cn/news/2013/11/introducing-nosql Alexey Vasiliev是一位知名的Web开发者与Linux系统管理员,曾参与开发过多个项目,如falcon、mongodb_logger、sht_rails及piro等项目。近日,Vasiliev就当前各种NoSQL数据库的优势与劣势撰文进行了

http://www.infoq.com/cn/news/2013/11/introducing-nosql


Alexey Vasiliev是一位知名的Web开发者与Linux系统管理员,曾参与开发过多个项目,如falcon、mongodb_logger、sht_rails及piro等项目。近日,Vasiliev就当前各种NoSQL数据库的优势与劣势撰文进行了详尽的分析。这些分析与比较将会对广大开发者项目的NoSQL数据库选型提供一定的帮助与指导作用。

NoSQL数据库现在已经变得非常流行了,在NoSQL这个大概念下实际上包含了大量的方式与项目,旨在实现各种数据库模型,他们与传统的关系型数据库管理系统存在着非常大的差别,而传统的关系型数据库系统是通过SQL的方式来访问数据的。在NoSQL领域中,传统观念中的模式可以通过不同的数据结构来实现,如散列表、数组、树、图等等。

术语“NoSQL”最早出现在上个世纪90年代末期,然而真正为大家所熟知则是在2009年中期。起初,它只是由Carlo Strozzi创建的一个小型开源数据库,将所有数据以ASCII文件的形式存储,并使用shell脚本而非SQL来访问这些数据。这个数据库与当前的“NoSQL”概念并没有任何相似之处。

Johan Oskarsson在2009年6月于旧金山组织了一场会议,讨论IT市场的新技术、数据存储与处理等主题。之所以会举办这场会议的主要原因在于BigTable和Dynamo等新产品的出现。“NoSQL”这个术语则是由来自RackSpace的Eric vans提出的。这个术语原本就是用在这场会议当中的,也没有什么更深层次的含义。不过最后的结果却是它迅速在互联网上蔓延开来,成为IT领域的一个新趋势。随后,Pramod J.Sadalage与Martin Fowler编写了“NoSQL Distilled”一书,旨在对日益庞大的NoSQL世界进行组织。

现在大约有150多种NoSQL数据库(nosql-database.org),下面就来探讨一下NoSQL的主要发展方向。

列簇存储

面向列的DBMS是这样一种数据库管理系统,它将数据表存储为数据列而非行的形式。从物理上来说,表是列的集合,每一列从本质上来说都是只有一个字段的表。这些数据库通常用于分析系统、商业智能与分析型数据存储。

优点:

  • 可以比较数据,因为在表的一列中,数据通常都是同种类型的。
  • 可以通过便宜、性能一般的硬件实现高速的查询性能;由于压缩的原因,相对于关系型数据库来说,这种方式磁盘上的数据所占据的空间要少5到10倍。

缺点:

  • 通常没有事务。
  • 对于熟悉传统RDBMS的开发者来说存在不少限制。

典型代表:

  • HBase
  • Cassandra
  • Accumulo
  • Amazon SimpleDB

键值存储

你可以通过这种数据库将键值对存储到持久化存储中,随后使用键来读取值。那么对于这种初看起来用途非常有限的解决方案来说有哪些好处呢?在根据键来保存/读取值时,系统是非常高效的,因为它没有SQL处理器、索引系统以及分析系统等诸多限制。这种解决方案提供了最高效的性能,代价最低的实现以及可伸缩性。

优点:

  • RDBMS太慢了,SQL游标的负担过于沉重。
  • 采用RDBMS的解决方案来存储少量数据的代价有些大。
  • 没必要使用SQL查询、索引、触发器、存储过程、临时表、表单以及视图等等。
  • 由于其轻量级的设计,键值数据库可以很容易实现可伸缩性以及高性能。

缺点:

  • 关系型数据库的限制可以从底层就确保数据的完整性,而键值存储就没有这些限制,数据的完整性是由应用来控制的。在这种情况下,数据的完整性可能会由于应用代码的错误而做一些妥协。
  • 在RDBMS中,如果模型设计良好,那么数据库的逻辑结构就能完全反映出存储数据的结构,并且与应用的结构有所不同(数据是独立于应用的)。对于键值存储来说,要想取得这种效果是非常困难的事情。

典型代表:

  • Amazon DynamoDB
  • Riak
  • Redis
  • LevelDB
  • Scalaris
  • MemcacheDB
  • Kyoto Cabinet

文档存储

文档存储指的是用于存储、搜索与管理面向文档的信息(半结构化数据)的程序,其中心概念就是文档。具体的面向文档数据库的实现是不同的,不过总的来说,他们都会以各种标准化格式对数据(文档)进行封装与加密,主要格式有XML、YAML、JSON、BSON、PDF等等。

优点:

  • 足够灵活的查询语言。
  • 易于水平扩展。

缺点:

在很多时候原子性是得不到保障的。

典型代表:

  • MongoDB
  • Couchbase
  • CouchDB
  • RethinkDB

图型数据库

图型数据库指的是使用图结构的数据库,通过结点、边与属性来表示和存储数据。根据定义,图型数据库是一种提供了无需索引而彼此邻接的存储系统。这意味着每个元素都包含了直接指向邻接元素的指针,因此没必要再通过索引进行查找了。

优点:

  • 对于关联数据集的查找速度更快。
  • 可以很自然地扩展为更大的数据集,因为他们无需使用代价高昂的连接运算符。

缺点:

  • RDBMS可以用在更为通用的场景下,图型数据库只适合类似于图的数据。

典型代表:

  • Neo4j
  • FlockDB
  • InfoGrid
  • OrientDB

多模数据库

这些数据库包含了多种数据库的特性。

有两种不同的产品分组可以认为是多模的:

  • 支持多种数据模型和用例的多模数据库。比如说,ArangoDB宣称它拥有键值存储的好处,同时还提供了面向文档以及图型数据库的支持。
  • 支持多种模式的通用目的的数据库。比如说,Oracle的MySQL 5.6支持SQL方式的访问,也可以通过Memcached API实现键值访问。

典型代表:

  • ArangoDB
  • Aerospike
  • Datomic

对象数据库

数据库中的数据都建模为对象、属性、方法以及类。面向对象的数据库通常适合于需要高性能数据处理的应用,这种应用一般都有非常复杂的结构。

优点:

  • 相比于关系元组来说,对象模型最适合于展现现实世界,对于复杂、多方位的对象来说尤为如此。
  • 使用层次特性来组织数据。
  • 访问数据时并不需要专门的查询语言,因为访问是直接面向对象的。然而,有时也是需要使用查询的。

缺点

  • 在RDBMS中,由于表的创建、修改或是删除而导致的模式修改通常并不依赖于应用。在使用对象数据库的应用中,模式修改类通常意味着还要对与当前类关联的其他应用类进行修改。这会导致对整个系统进行修改。
  • 对象数据库通常会通过单独的API与特定的语言绑定,只有通过该API才能查询数据。在这方面,RDBMS就做得很好,这要归功于它所使用的通用查询语言。

典型代表:

  • VelocityDB
  • Objectivity
  • ZODB
  • Siaqodb
  • EyeDB

多维数据库

这是针对在线分析处理的一种数据库,它可以从各种关系型数据库中检索数据,并且以某种方式将信息组织为类别和段当中。

典型代表:

  • GlobalsDB
  • Intersystems Cache
  • SciDB
  • Rasdaman

多值数据库

多维数据库的变种。主要的特性是支持使用属性来存储值的列表。

典型代表:

  • Rocket U2
  • OpenInsight
  • Reality

总结

NoSQL的发展速度异常迅猛,不过这并不意味着关系型数据库就没落了。他们还会在很多场景下发挥着巨大的作用,并且与NoSQL数据库共存。我们现在处在多种持久化存储共存的时代,并不存在处于垄断地位的关系型数据库与NoSQL数据库。架构师们对数据库的选择将会基于数据存储本身的特性,以及所预估的数据量。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLはSQLiteとどのように違いますか?MySQLはSQLiteとどのように違いますか?Apr 24, 2025 am 12:12 AM

MySQLとSQLiteの主な違いは、設計コンセプトと使用法のシナリオです。1。MySQLは、大規模なアプリケーションとエンタープライズレベルのソリューションに適しており、高性能と高い並行性をサポートしています。 2。SQLiteは、モバイルアプリケーションとデスクトップソフトウェアに適しており、軽量で埋め込みやすいです。

MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?Apr 24, 2025 am 12:09 AM

MySQLのインデックスは、データの取得をスピードアップするために使用されるデータベーステーブル内の1つ以上の列の順序付けられた構造です。 1)インデックスは、スキャンされたデータの量を減らすことにより、クエリ速度を改善します。 2)B-Tree Indexは、バランスの取れたツリー構造を使用します。これは、範囲クエリとソートに適しています。 3)CreateIndexステートメントを使用して、createIndexidx_customer_idonorders(customer_id)などのインデックスを作成します。 4)Composite Indexesは、createIndexIDX_CUSTOMER_ORDERONORDERS(Customer_Id、Order_date)などのマルチコラムクエリを最適化できます。 5)説明を使用してクエリ計画を分析し、回避します

データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。Apr 24, 2025 am 12:09 AM

MySQLでトランザクションを使用すると、データの一貫性が保証されます。 1)StartTransactionを介してトランザクションを開始し、SQL操作を実行して、コミットまたはロールバックで送信します。 2)SavePointを使用してSave Pointを設定して、部分的なロールバックを許可します。 3)パフォーマンスの最適化の提案には、トランザクション時間の短縮、大規模なクエリの回避、分離レベルの使用が合理的に含まれます。

どのシナリオでMySQLよりもPostgreSQLを選択できますか?どのシナリオでMySQLよりもPostgreSQLを選択できますか?Apr 24, 2025 am 12:07 AM

MySQLの代わりにPostgreSQLが選択されるシナリオには、1)複雑なクエリと高度なSQL関数、2)厳格なデータの整合性と酸コンプライアンス、3)高度な空間関数が必要、4)大規模なデータセットを処理するときに高いパフォーマンスが必要です。 PostgreSQLは、これらの側面でうまく機能し、複雑なデータ処理と高いデータの整合性を必要とするプロジェクトに適しています。

MySQLデータベースをどのように保護できますか?MySQLデータベースをどのように保護できますか?Apr 24, 2025 am 12:04 AM

MySQLデータベースのセキュリティは、以下の測定を通じて達成できます。1。ユーザー許可管理:CreateUSERおよびGrantコマンドを通じてアクセス権を厳密に制御します。 2。暗号化された送信:SSL/TLSを構成して、データ送信セキュリティを確保します。 3.データベースのバックアップとリカバリ:MySQLDUMPまたはMySQLPumpを使用して、定期的にデータをバックアップします。 4.高度なセキュリティポリシー:ファイアウォールを使用してアクセスを制限し、監査ロギング操作を有効にします。 5。パフォーマンスの最適化とベストプラクティス:インデックス作成とクエリの最適化と定期的なメンテナンスを通じて、安全性とパフォーマンスの両方を考慮に入れます。

MySQLのパフォーマンスを監視するために使用できるツールは何ですか?MySQLのパフォーマンスを監視するために使用できるツールは何ですか?Apr 23, 2025 am 12:21 AM

MySQLのパフォーマンスを効果的に監視する方法は? MySqladmin、ShowGlobalStatus、PerconAmonitoring and Management(PMM)、MySQL EnterpriseMonitorなどのツールを使用します。 1. mysqladminを使用して、接続の数を表示します。 2。showglobalstatusを使用して、クエリ番号を表示します。 3.PMMは、詳細なパフォーマンスデータとグラフィカルインターフェイスを提供します。 4.mysqlenterprisemonitorは、豊富な監視機能とアラームメカニズムを提供します。

MySQLはSQL Serverとどのように違いますか?MySQLはSQL Serverとどのように違いますか?Apr 23, 2025 am 12:20 AM

MySQLとSQLServerの違いは次のとおりです。1)MySQLはオープンソースであり、Webおよび埋め込みシステムに適しています。2)SQLServerはMicrosoftの商用製品であり、エンタープライズレベルのアプリケーションに適しています。ストレージエンジン、パフォーマンスの最適化、アプリケーションシナリオの2つには大きな違いがあります。選択するときは、プロジェクトのサイズと将来のスケーラビリティを考慮する必要があります。

どのシナリオでMySQLよりもSQL Serverを選択できますか?どのシナリオでMySQLよりもSQL Serverを選択できますか?Apr 23, 2025 am 12:20 AM

高可用性、高度なセキュリティ、優れた統合を必要とするエンタープライズレベルのアプリケーションシナリオでは、MySQLの代わりにSQLServerを選択する必要があります。 1)SQLServerは、高可用性や高度なセキュリティなどのエンタープライズレベルの機能を提供します。 2)VisualStudioやPowerbiなどのMicrosoftエコシステムと密接に統合されています。 3)SQLSERVERは、パフォーマンスの最適化に優れた機能を果たし、メモリが最適化されたテーブルと列ストレージインデックスをサポートします。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境