خانه / NewSQL & SQL / مقایسه و انتخاب / چرا پستگرس ؟ – امکانات و مزایای اختصاصی پستگرس – بخش اول
Psg

چرا پستگرس ؟ – امکانات و مزایای اختصاصی پستگرس – بخش اول

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

Postgres

میزان رشد محبوبیت پستگرس و مای اس کیو ال در سایت DB-Engines هم همین موضوع را تایید می کند. در هر صورت، این گرایش و افزایش محبوبیت قطعاً بی دلیل نیست و امکانات ومزایای آن باعث جذب مخاطبین شده است . در این مقاله، امکانات و مزایای اصلی پستگرس فهرست شده اند که به اصلی ترین آنها به صورت فهرست وار اکتفا می کنیم :

      • مدل داده ای : پستگرس یک بانک اطلاعاتی رابطه ای صرف نیست بلکه یک بانک اطلاعاتی شی گرا – رابطه ای (object-relational) است. مشخصه اصلی این نوع بانکهای اطلاعاتی امکان تعریف اشیاء‌ توسط کاربر با توابع ، نوع داده ها، عملگرها ، دامنه های مقادیر فیلدها و ایندکس های سفارشی است  که کار مدیریت موجودیت ها را حرفه ای تر و به دنیای امروز برنامه نویسی نزدیک تر می کند.
      • پشتیبانی از انواع داده ها و ساختارها : علاوه بر انواع داده های معمول بانکهای اطلاعاتی مانند صحیح و اعشاری و رشته ای و منطقی، پستگرس انواع داده ها مانند UUID، داده های مالی، شمارشی ، جغرافیایی، باینری، آدرسهای شبکه، رشته های بیتی ، جستجوی متن، اکس ام ال ، جی سان، آرایه ها ، و انواع داده ای مرکب را نیز پشتیبانی می کند که نسبت به مای اس کیو ال، تعداد بسیار بیشتری را به طراحان و برنامه نویسان ارائه می کند. تعدادی از این انواع داده ای را در مثالهای زیر می توانید ببینید :
          • آرایه های چند بعدی : به دلیل حمایت از شی گرایی در پستگرس، امکان ذخیره آرایه ای هر کدام از این انواع به راحتی در آن تعبیه شده است . قابلیتی که سایر پایگاه های داده مشابه، با استفاده از جداول اضافی آنرا انجام میدهند. مثال زیر یک جدول پیک نیک را ایجاد می کند که اغلب داده های آن آرایه ای هستند و نحوه درج داده ها در این ساختار هم در انتهای مثال آمده است :
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        -- create a table where the values are arrays
        CREATE TABLE holiday_picnic (
        holiday VARCHAR(50) -- single value
        sandwich text[], -- array
        side text[] [], -- multi-dimensional array
        dessert text ARRAY, -- array
        beverage text ARRAY[4] -- array of 4 items
        );

        -- insert array values into the table
        INSERT INTO holiday_picnic VALUES
        ('Labor Day',
        '{"roast beef","veggie","turkey"}',
        '{
        {"potato salad","green salad","macaroni salad"},
        {"chips","crackers"}
        }'
        ,
        '{"fruit cocktail","berry pie","ice cream"}',
        '{"soda","juice","beer","water"}'
        );
          • پشتیبانی از داده های جغرافیایی : امروزه برنامه های حساس به مکان جزء ملزومات زندگی شده اند برنامه هایی که بسته به موقعیت فعلی کاربر، داده ها را ذخیره کرده و پیشنهادهای هوشمند به او ارائه می دهند. پستگرس، سالهاست که نوع داده های نقطه ، خط ، چند ضلعی و مانند آنرا برای کار با داده های جغرافیایی ارائه می کند. بخصوص افزونه معروف PostGIS امکانات تخصصی و کاملتری را روی این داده ها در اختیار برنامه نویسان قرار می دهد. هر چند مای اسکیو ال و ماریا دی بی در نسخه های اخیر خود قابلیت های اولیه جغرافیایی را به فهرست امکانات خود افزوده اند اما کار با آنها هنوز به راحتی پستگرس نیست . در زیر یک مثال در پستگرس را می بینید که با نوع داده Path مسیر پیمایشی یک دوچرخه سوار را ذخیره می کند :
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        -- create a table for trails
        CREATE TABLE trails (
        trail_name VARCHAR(250),
        trail_path path
        );

        -- insert a trail into the table
        -- where the path is defined by lat-long coordinates
        INSERT INTO trails VALUES
        ('Dool Trail - Creeping Forest Trail Loop',
        ((37.172,-122.22261666667),
        (37.171616666667,-122.22385),
        (37.1735,-122.2236),
        (37.175416666667,-122.223),
        (37.1758,-122.22378333333),
        (37.179466666667,-122.22866666667),
        (37.18395,-122.22675),
        (37.180783333333,-122.22466666667),
        (37.176116666667,-122.2222),
        (37.1753,-122.22293333333),
        (37.173116666667,-122.22281666667)));
      • پشتیبانی از جی سان : یکی دیگر از امکانات داده ای پستگرس،‌پشتیبانی آن از جی سان است که آنرا به رقیبی برای پایگاه داده های نوظهور سندگرا مانند مانگو دی بی تبدیل می کند و برای جاهایی که ساختار داده ای نامشخص دارند، می تواند بسیار موثر باشد . از طرفی اگر نوع داده خود را در این حالت به جای JSONمعمولی ،  JSONB یا جی سان باینری انتخاب کنید ،‌علاوه بر حذف فضاهای خالی و صرفه جویی در فضای ذخیره سازی، امکان ایندکس گذاری روی داده های ذخیره شده در این ستون را هم فراهم می آورد . مای اس کیو ال و ماریا دی بی هم در نسخه های اخیر خود، پشتیبانی از جی سان را انجام می دهند اما هنوز قابلیت شاخص گذاری روی آن را ندارند. برای دیدن مثالی در این زمینه می توانید به این مقاله از سایت مهندسی داده رجوع کنید .
      • ساخت نوع داده های جدید توسط کاربر : اگر لیست متنوع نوع داده های پستگرس شما را راضی نکرد،‌ می توانید خودتان به ساخت نوع داده های جدید اقدام کنید. قابلیتی که مای اس کیو ال و ماریا دی بی به دلیل شی گرا نبودن،‌فاقد آن هستند. مثال زیر را ببینید :
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        -- create a new composite type called "wine"
        CREATE TYPE wine AS (
        wine_vineyard VARCHAR(50),
        wine_type VARCHAR(50),
        wine_year INT
        );-- create a table that uses the composite type "wine"
        CREATE TABLE pairings (
        menu_entree VARCHAR(50),
        wine_pairing wine
        );-- insert data into the table using the ROW expression
        INSERT INTO pairings VALUES
        ('Lobster Tail',ROW('Stag''s Leap','Chardonnay', 2012)),
        ('Elk Medallions',ROW('Rombauer','Cabernet Sauvignon',2012));/*
        query from the table using the table column name
        (use parentheses followed by a period
        then the name of the field from the composite type)
        */

        SELECT (wine_pairing).wine_vineyard, (wine_pairing).wine_type
        FROM pairings
        WHERE menu_entree = 'Elk Medallions';
      • اندازه داده ها : پارامتر دیگری که می تواند خیال شما را از انتخاب درست بانک اطلاعاتی راحت کند، اندازه و حجم داده ایست که پستگرس می تواند به ازای هر جدل و ستون ذخیره کند . به عنوان مقایسه اگر بخواهیم این جدول را بررسی کنیم توجه شما را به این نکته جلب میکنیم که حداکثر اندازه یک سطر در مای اس کیو ال ۶۴KB و در پستگرس ۱٫۶‌ ترابایت است.
        postgressSize
      • جامعیت داده ها : پستگرس از استاندارد ANSI-SQL:2008 پشتیبانی می کند که باعث می شود در رده بانکهای اطلاعاتی با پشتیبانی کامل از ACID (Atomicity, Consistency, Isolation and Durability) قرار گیرد در مقایسه با مای اس کیو ال که هم از دستور  Check‌ پشتیبانی نمی
      • کند و هم امکانات ارائه شده برای جامعیت داده های آن بسته به نوع موتور انتخابی آن ، متغیر است.

جمع بندی :

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

۲ نظرات

  1. با سلام و تشکر از سایت بسیار مفیدتان

    من در مورد دیتا بیس های noSQL تحقیق می کردم که به سایت شما رسیدم و وقتی یک سایت فارسی زبان با این همه اطلاعات مفید دیدم کلی ذوق کردم.خسته نباشید

    چندتا سوال داشتم

    اینکه در ایران سرویس دهنده ی هاستی می شناسید که از دیتابیس های غیر رابطه ای پشتیبانی بکند و همین طور از postres؟ اگر نیست باید چی کار کنم؟

    یکی هم در مورد زبان اسکالا که توضیح داده بودید, من بعد از خوندن آون مطلب جذب این زبان شدم

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

    اینکه ۳۲ بیتی و ۶۴ بیتی را چطور پشتیبانی می کند و اینکه کلاس ها و شی های از پیش تعریف شده داره؟مثلا من بخواهم یک فونتی ذر خوذ برنامه تعبیه کنم و برنامه را با آن فونت خاص نمایش بدم این قابلیت ها را دارد یا خیر؟

     

    با تشکر فراوان

    • دوست عزیز فکر نمی کنم هیچ هاستی این کار رو انجام بده . چون مدیریت دیتابیس های غیر رابطه ای کمی پیچیده است. بهترین حالت اینه که یک سرور مجازی تهیه کنی یا از سرویس های cloud مثل گوگل یا آمازون یا مایکروسافت استفاده کنی.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Time limit is exhausted. Please reload CAPTCHA.