مقدمه

 همانطور که در مقاله قبلی خواندید NoSQL انواع مختلفی دارد.

 NoSQL ها به 4  دسته key-value ها، Column Store ها، Document Store ها و Graph ها تقسیم می شوند و نیز تعداد بسیاری پایگاه داده در هر کدام از این دسته ها با مزایا و معایب خاصی قرار گرفته اند و اکثرا برنامه نویسان برای انتخاب پایگاه داده مناسب برای نرم افزار خود معمولا دچار سردرگمی می  شوند. در این بخش قصد داریم تعدادی از پایگاه داده های NoSQL که در دسته های مختلفی قرار دارند و از نظر سرعت و کارایی نسبت به دیگر پایگاه داده ها برتری دارند را با پارامترهای مختلف مورد مقایسه قرار دهیم.

 

پارامترهای مورد مقایسه عبارت اند از:

  • در کدام یک از 4 دسته NoSQL هستند
  • متن باز بودن
  • بر روی چه سرور هایی قابل اجرا می باشند
  • Transactional بودن

Transaction  یعنی تراکنش، پشتیبانی از خاصیت  ACID

          ACID  چیست؟

Atomicity  (یکپارچگی):  این خاصیت به « همه یا هیچ» موسوم می باشد . منظور این است که تمام دستورالعمل های یک تراکنش باید اجرا شود و یا هیچ کدام از آنها

Consistency  (همخوانی): این خاصیت به این منظور است که هر تراکنش باید تمام قوانین جامعیت بانک اطلاعات را رعایت کند. بخشی از خاصیت همخوانی قابل کنترل نیست و باید فرض شود. تراکنش ممکن است دو نوع پایان داشته باشد: پایان ناموفق که آنرا “برگشت” (Rollback) می نامند، پایان موفق که آنرا “انجام” (Commit) می نامند.

Isolation ( انزوا):  بر طبق این خاصیت اثر تراکنش های همروند روی یکدیگر چنان می باشد که گویا هر کدام در انزوا انجام می شود. در بانک اطلاعات تراکنش های همروند وجود دارند ولی همروندی آنها کنترل می شود تا اثر مخرب روی هم نداشته باشند.

Durability (پایایی):  براساس این خاصیت تراکنش هایی که به مرحله انجام (Commit) برسند اثرشان ماندنی است و هرگز به طور تصادفی از بین نمی رود.

          به عنوان مثال تراکنش بانکی را در نظر بگیرید، هنگامی که شما می خواهید پولی را از یک حساب به حساب دیگر انتقال دهید می بایست داخل یک تراکنش انجام شود، دارای 2 مرحله می باشد:

مرحله اول برداشت از حساب مبدا می باشد و آن میزان پول از حساب شخص کسر شده و در مرحله دوم به حساب مقصد واریز می شود و به حساب مقصد اضافه می شود. اگر به هر دلیلی مرحله اول انجام شود ولی در مرحله دوم دچار مشکل شود تراکنش برگشت خواهد خورد و مرحله اول نیز به حالت قبل از انجام تراکنش باز خواهد گشت.

 

  • با چه زبانی نوشته شده اند
  • آیا از زبان برنامه نویسی C و C++ پشتیبانی می کنند؟
  • پشتیبانی از اسکریپت های سمت سرور از قبیل جاوا اسکریپت، php و …
  • پشتیبانی از تریگر

تریگر چیست؟

تریگر رویه ای ذخیر شده است که به هنگام درج یا بروز رسانی جدولی، آن نیز انجام میشود و مقدار برگشتی ندارد.

به عنوان مثال شما فاکتور فروشی را در نظر بگیرید برای اینکه بعد از فروخته شدن یک کالا می خواهید تعداد کالای فروخته شده از جدول کالا از مقدار موجودی کالا کسر شود.

  • Replication

یکی از کارهای Replication این است که به عنوان مثال پایگاه داده شما بر روی یک سرور دیگر نیز وجود دارد و هر اطلاعاتی که داخل سرور اصلی دارید بر روی سرورهای دیگر نیز موجود می باشد اگر سرور اصلی دچار مشکل شد سرور دیگری جایگزین آن می شود و کار سرور اصلی را به عهده می گیرد.

  • MapReduce

MapReduce الگوریتمی است که در برنامه ها استفاده می شود و به معنای نوشتن کدی است، با دو تابع. اولین تابع اصطلاحاً Map step یا مرحله نگاشت نام دارد. در این مرحله کوئری به قسمت‌های کوچکتری خرد شده و بر روی سیستم‌های توزیع شده به صورت موازی اجرا می‌شود. مرحله بعد Reduce step نام دارد که در آن، نتیجه دریافتی حاصل از کوئری‌های اجرا شده بر روی سیستم‌های مختلف، با هم یکی خواهند شد.

  • Foreign key یا کلید خارجی

کلید خارجی شناسه ای از رکوردی می باشد در که در جای دیگر از آن کلید می توان استفاده کرد و رابطه برقرار کرد و …

  • In – Memory

اینکه داده ها را می توانند در حافظه رم به صورت کش داشته باشند تا سرعت خواندن اطلاعات افزایش یابد و موارد دیگر

  • Embed

قابلیت سفارشی سازی و کنترل پایگاه داده توسط برنامه نویس و اضافه کردن به عنوان جزئی از نرم افزار

  • Query

زبان تغییرات  و خواندن اطلاعات پایگاه داده

  • Partitioning

یعنی بتوان بر روی سرورهای دیگر پایگاه داده را داشته باشیم و و از نظر جغرافیایی هیچ محدودیتی نداشته باشیم و بار کاری بر روی همه سرورها پخش شود

  • Configuration

پیاده سازی و تنظیمات برای نصب و استفاده از پایگاه داده

  • Dependency

برای استفاده از پایگاه داده با توجه به زبان برنامه نویسی و یا پیاده سازی آن وابسته به چه پیش نیازهایی می باشد؟

  • Performance

سرعت و قدرت نوشتن و خواندن، پایائی، بازدهی

  • Online Backup

توانایی گرفتن پشتیبان به صورت خودکار در حین فعال بودن و ارائه سرویس به کاربران

 

در ادامه این مقایسه را در قالب جدول داریم:

 

EjDB

iBoxDB

RocksDB

UpscaleDB

Sophia

LMDB

Sparsity (Sparksee)

OnyxDB

Name

Document store

Document store

Key-Value

Key-Value

Key-Value

Key-Value

Graph

Graph

NoSQL Type

Yes

Yes

Yes

Yes

Yes

No

Yes

Yes

Open Source

any

any

any

any

linux – windows

any

any

___

Server Operating Systems

No

Yes ACID

No

Yes ACID

Yes ACID

Yes ACID

Yes ACID

Yes ACID

Transaction

Softmotions

Level

Facebook, Inc.

__

Sophia

Symas

Sparsity

Onyx

Developer

C

Java

C++

C

C99

___

C++

__

 language

Yes

No

Yes

Yes

No

___

Yes

__

Supported languages (C/C++)

No

__

No

__

Yes

Yes

Yes

Yes

Server-side scripts

No

Yes

No

No

No

No

__

No

Triggers

None

Yes

No

No

Yes

___

Yes

Yes

Replication

No

No

No

No

No

No

__

No

MapReduce

No

No

No

No

No

No

__

No

Foreign keys

__

 

Yes

Yes

Yes

Yes

__

Yes

In-memory

Yes

Yes

Yes

Yes

Yes

No

__

Yes

Embed

Like MongoDB – Json

SQL like Query

__

Like SQL Query

yes Like Json

__

 

Like Json

Query

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Partitioning

__

__

__

__

Low

__

__

__

 Configuration

No

Yes

No

No

Yes

__

No

 

Dependency

Good

Good

High

High

High

High

High

Middle

Performance

Yes

Yes

__

Yes

Yes

__

__

__

Online Backup

 

AtlasDB

concourse

RethinkDB

MarkLogic

RavenDB

Aerospike

UnQLite

Name

Key-Value

Graph

Document Store

Document Store

Document Store

Key-Value

Key-Value _ Document Store

NoSQL Type

Yes

Yes

Yes

No

Yes

Yes

Yes

Open Source

linux – windows

Linux – Windows

Linux – OS X

Linux

windows

Linux

linux – windows

Server Operating Systems

Yes ACID

Yes ACID

 Atomic single-document operations

Yes ACID

Yes ACID

Yes ACID single Row

Yes ACID

Transaction

Palantir

__

RethinkDB

MarkLogic Corp.

Hibernating Rhinos

Aerospike

Symisc Systems

Developer

__

__

C++

C

.NET

C

C

language

__

Yes

Yes

Yes

No

Yes

Yes

Supported languages (C/C++)

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Server-side scripts

__

__

Client-side

Yes

Yes

No

__

Triggers

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Replication

Yes

__

Yes

Yes

Yes

No

__

MapReduce

__

Link

No

Yes

No

No

__

Foreign keys

Yes

__

No

Yes

__

Yes

Yes

In-memory

__

No

No

No

__

No

Yes

Embed

__

Graph Queries

__

SQL92

__

Like Json

 Json – Jx9

Query

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Partitioning

__

Low

Low

Low

Low

Low

Low

Configuration

__

 

No

No

Yes

No

No

Dependency

High

Good

Good

Good

High

very High

High

Performance

__

 

__

Yes

__

Yes

Yes

Online Backup

 

 

Neo4j

MongoDB

AlchemyDB

C-TreeAce

ArangoDB

OrientDB

Name

Graph

Document store

Key-Value

Key-Value * RDBMS

Document – Graph – Key-Value

Document – Graph – Key-Value

NoSQL Type

Yes

Yes

___

No

Yes

Yes

Open Source

Linux – Windows – OS X

Linux – Windows – OS X

Linux

linux – windows

Windows – linux

All os with java vm

Server Operating Systems

Yes – ACID

No

Yes ACID

Yes ACID

Yes ACID

Yes ACID

Transaction

Neo Technology

MongoDB, Inc

now Apple

__

__

__

Developer

Java

C++

C++

C ++

C

Java

language

No

Yes

Yes

Yes

__

Yes

Supported languages (C/C++)

Yes (Java plugin)

JavaScript

__

Yes

Yes

Yes

Server-side scripts

Yes

No

__

Yes

__

__

Triggers

Master-slave replication

Master-slave replication

Yes

Yes

Yes

Yes

Replication

No

Yes

No

__

__

__

MapReduce

Yes

No

__

Yes

__

Yes

Foreign keys

__

Yes

Yes

Yes

__

__

In-memory

No

No

__

No

No

No

Embed

Cypher Query

Like Json

Like Json

SQL

 Like Json

Like SQL

Query

Yes

Yes

Yes

Yes

Yes

Yes

Partitioning

__

__

__

Low

Low

Low

Configuration

Yes

No

No

No

Low

No

Dependency

Middle

Good

High

Good

Good

Good

Performance

Yes

__

Yes

Yes

__

Yes

Online Backup

 

 

منابع

و سایت های رسمی هر دیتابیس