MongoDBMYSQLPostgreRedis

مقایسه پایگاه داده – SQL و NoSQL (MySQL در مقابل PostgreSQL ،Redis و MongoDB)

من اخیراً بسیاری از عملیات های پایگاه داده را انجام داده ام که انجام آنها ساعت ها به طول انجامیده است. انتظار طولانی مدت ممکن است شما را مجبور به جستجوی جایگزین بهتری برای موتور پایگاه داده فعلی خود کند ،برای روشن شدن این مسئله ، سعی کردم مقایسه ای را بر اساس عملکرد پایگاه داده پیدا کنم . بنابراین این مقاله را آماده کردم.

پایگاه های داده (Databases)

در این تجزیه و تحلیل از 4 پایگاه داده استفاده شده است:

  • MySQL
  • PostgreSQL
  • Redis
  • MongoDB

در اینجا ما هر دو پایگاه داده SQL و NoSQL را داریم. تفاوت اصلی این دو در این است که پایگاه های داده SQL ، پایگاه های ارتباطی (RDBMS) نیز نامیده می شوند ، دارای ساختار رابطه ای هستند و NoSQL از روابط استفاده نمی کند.

پایگاه داده های SQL به طور عمودی مقیاس پذیر هستند ، به این معنی که یک ماشین نهایی کار شما را انجام می دهد. از طرف دیگر ، پایگاه داده های NoSQL به صورت افقی مقیاس پذیر هستند ، به این معنی که چندین ماشین کوچکتر کار شما را انجام می دهند.

مقایسه پایگاه داده های NoSQL و SQL به دلیل تفاوت در ساختار کار سختی است.

اما برای این مقایسه قصد داریم فقط عملیات درج ، انتخاب ، به روزرسانی و حذف اصطلاحاً عملیات CRUD (Create, Read, Delete, Update) را که هم در NoSQL و هم SQL قابل انجام است ، آزمایش کنیم.

گوگل ترند

روندهای گوگل نشان می دهد که MySQL یک قهرمان واقعی در جستجوها است ، اما آیا با عملکرد عالی همراه است؟ بررسی خواهیم کرد!

MySQL چیست؟

MySQL چیست؟

MySQL یک سیستم مدیریت پایگاه داده کامل رابطه ای است که توسط شرکت MYSQL AB حمایت مالی می شود ، اما هنوز کد منبع، منبع باز است.که به زبان C و C ++ نوشته شده و با اکثر سیستم عامل های فعلی کار می کند. در این مقایسه از نسخه 5.7 استفاده شده که تا اکتبر 2023 پشتیبانی می شود.

PostgresSQL چیست؟

PostgresSQL چیست؟

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

 Redis چیست؟

Redis چیست؟

Redis یک منبع داده منبع باز (BSD) است که دارای حافظه ذخیره سازی ساختار داده است و می تواند به عنوان پایگاه داده ، حافظه پنهان یا واسطه پیام استفاده شود و یک پایگاه داده NoSQL است که در GitHub ، Pinterest و Snapchat استفاده می شود.عملکرد مجدد و دستکاری اتمی ساختارهای داده ، مشکلاتی را حل می کند که اغلب می توان در پایگاه های داده رابطه ای یافت.

 MongoDB چیست؟

MongoDB چیست؟

MongoDB یک پایگاه داده توزیع شده با هدف کلی ، مبتنی بر سند (document-based) است. که نمونه دیگری از پایگاه داده NoSQL است. ضبط ( Record ) در MongoDB سندی است که شامل یک ساختار داده ای متشکل از جفت های فیلد و مقدار می شود.

ابزارها

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

درایورهایی که برای پایگاه داده مشخص شده استفاده شده:

  • MySQL -> MySQL Connector
  • Postgres -> psycopg2
  • Redis -> redis-py
  • MongoDB -> PyMongo

برای مدیریت تمام پایگاه های داده در یک برنامه،از Docker-compose استفاده شده که پایگاه داده را به عنوان سرویس مدیریت می کند. با استفاده از Docker برای مدیریت پایگاه داده ها ، امکان نصب هر پایگاه داده به صورت محلی حذف شده است.

در اینجا مثالی آورده شده است که برای تولید نمونه داده از آن استفاده شده است:

version: '3'
services:
  postgres:
    container_name: postgres_container
    image: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
      PGDATA: /data/postgres
    volumes:
      - postgres:/data/postgres
    ports:
      - "5432:5432"
    restart: unless-stopped
  mysql:
    image: mysql:5.7
    privileged: true
    command: "--skip-grant-tables"
    volumes:
      - my-datavolume:/var/lib/mysql
    environment:
      MYSQL_ROOT_USER: mysql
      MYSQL_ROOT_PASSWORD: mysql
      MYSQL_DATABASE: mysql
      MYSQL_USER: mysql
      MYSQL_PASSWORD: mysql
    ports:
      - '3306:3306'
  mongodb:
      image: mongo:latest
      container_name: mongodb
      ports:
          - "27017:27017"
  redis:
    container_name: redis
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - ../data/redis:/data
    restart: always

  web:
    build: .
    depends_on:
      - postgres
      - mysql
      - redis
      - mongodb
volumes:
    postgres:
    my-datavolume:

برای ایجاد اجرای مشابه از هر عملیاتی ، توزیع کننده پایگاه داده ایجاد شده ، که برای هر پایگاه داده یک عملیات مشخص را اجرا می کند.

در اینجا می توانید بخشی از کدها را برای عملیات درج مشاهده کنید:

class DataDispatcher:
    databases = {
        'mysql': MySQLDatabase(),
        'postgres': PSQLDatabase(),
        'redis': RedisDatabase(),
        'mongo': MongoDatabase()
    }

    def get_insert_data(self):
        insert_data = {}
        for name, database in self.databases.items():
            print(Insert for: {name})
            insert_data[name] = database.generate_insert_data()
        return insert_data

عملیات (Operations)

برای مقایسه ، از تمام عملیات CRUD استفاده شده است، بنابراین به دنبال ایجاد ، خواندن ، به روزرسانی و حذف خواهیم بود.

ایجاد (CREATE)

در عملیات ایجاد (CREATE) می توان مشاهده کرد که Mongo و Redis قطعاً بهتر هستند. در حدود 400–500 عملیات MySQL نیز خوب به نظر می رسد ، اما بعد از 600 رکورد ، عملکرد MySQL کاهش یافته و نتایج مشابه Postgres می شود.

انتخاب (SELECT)

عملیات انتخاب (SELECT) نشان می دهد که SQL در اینجا عملکرد بدی دارد. با اجرای عملیات انتخاب (SELECT) در MySQL و Postgres ، زمان به سرعت رشد می کند. برای NoSQL مهم نیست که چند رکورد برای انتخاب نیاز دارد ، زمان اساساً ثابت است.

بروزرسانی (UPDATE)

مصرف زمان برای بروزرسانی (UPDATE) نیز برای پایگاه داده های SQL بسیار بیشتر است ، اما افزایش زمان برای هر دو پایگاه داده مشابه است.زمان کار برای Redis و Mongo و MySQL برای 5000 رکورد کمتر از 1 ثانیه است. فقط Postgres بیش از 10 ثانیه نتیجه می دهد.

حذف (DELETE)

در اینجا بیشترین تفاوت را در نتایج داریم. عملیات حذف (DELETE) برای Redis نشان می دهد که داشتن تمام سوابق در حافظه امکان حذف تقریباً فوری داده ها را فراهم می کند. زمان حذف سوابق برای پایگاه های داده SQL پایدار است. برای Mongo می بینیم که زمان حذف به تعداد سوابق بستگی دارد.

نتیجه

این مقایسه زمان انجام یک نوع عملکرد خاص و یکبار استفاده از پایگاه داده را نشان می دهد.در بیشتر موارد ، Redis بهترین عملکرد را داشت زیرا فقط ذخیره کلید / مقدار است ، بنابراین هنگامی که عملیات پیدا کردن رکوردهای با مقدار مشخص انجام می شد منطقی بود که Redis باید برنده شود.

NoSQL به demoralization متکی است و برای پرونده تغییر شکل یافته بهینه سازی می کند. اگر برای مثال یک پست وبلاگ را در نظر بگیریم ، همه موارد مرتبط با متن (متن ، نظر ، پسندیدن و غیره) در یک سند ذخیره می شوند ، بنابراین نیازی به انجام عملیات join نخواهد بود.

در این مقایسه می بینیم که عملیات تک CRUD در پایگاه های داده NoSQL بسیار سریعتر است ، اما هنوز هم باید به یاد داشته باشیم که SQL می تواند عملیات بیشتری انجام دهد.علاوه بر این ، سرعت پایگاه داده به برنامه ای که ایجاد می کنید نیز بستگی دارد.

برای خواندن مقاله مقایسه MariaDB،MYSQL،PostgreSQL بر روی لینک کلیک کنید

کلمات کلیدی:مقایسه پایگاه داده – SQL و MySQL/NoSQL چیست؟/PostgresSQL چیست؟/Redis چیست؟/MongoDB چیست؟

امیرحسین باقری

امیرحسین باقری هستم عاشق طراحی سایت در زمینه python و همینطور طراح قالب و متخصص فرانت اند؛ از دانشی که تو این مدت بدست آوردم میشه به: html&css , ,bootstrap, C#, flexbox , sass , javascript , Django,celery,Django channels,DRF,Ruby ,Ruby on Railsاشاره کرد.

دیدگاهتان را بنویسید

دکمه بازگشت به بالا