۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

Postgres همه جا

SQLite در همه جا تعبیه شده است. آیا Postgres از این روند پیروی خواهد کرد؟

SQLite در همه جا تعبیه شده است. آیا Postgres از این روند پیروی خواهد کرد؟

SQLite گسترده ترین موتور پایگاه داده جهان است. این در تلفن شما، در مرورگر شما است، و اگر کامپیوتر خود را جستجو کنید، فایل های .db آن را نیز در آنجا خواهید یافت. SQLite از Postgres الهام گرفته شده است. ریچارد هیپ، نویسنده آن، SQLite را «چنگال مفهومی» Postgres نامیده است. هیچ کد مشترکی وجود ندارد، اما Postgres ستاره شمالی بود که SQLite را با آن تراز کرد. او گفت که این دو مکمل هم از طرق زیر هستند.

Postgres SQLite
انبار داده های سازمانی فرمت فایل برنامه
مشتری/سرور بدون سرور
مقیاس کردن کوچک کردن

امروزه این تمایزات شروع به محو شدن کرده اند. به عنوان مثال، SQLite به عنوان یک پایگاه داده تعبیه شده در نظر گرفته می شود. اما Postgres نیز در حال تبدیل شدن به یکی است. به عنوان مثال، می گوییم که Steampipe Postgres را جاسازی می کند. این از نظر فنی درست نیست. شما نمی توانید Postgres را به یک برنامه باینری پیوند دهید، اما می توانید (همانطور که Steampipe انجام می دهد) یک باینری ارائه دهید که نصب، اجرا و با Postgres همکاری می کند. یا Yugabyte را در نظر بگیرید، که لایه جستجوی Postgres را بر روی یک لایه ذخیره‌سازی توزیع شده می‌پیچد. شاید نه تکنیکی جاسازی Postgres، بلکه مسلماً معادل اخلاقی است.

Steampipe و Yugabyte فقط با Postgres سازگار نیستند. آنها در واقع Postgres با قابلیت اضافی هستند (بسته های داده خارجی Steampipe برای APIها، ذخیره سازی توزیع شده Yugabyte). کاربران می توانند با psql، پایانه تعاملی Postgres، به این محصولات متصل شوند. آنها می توانند همان نوع پرس و جو را بنویسند. آنها می توانند از برنامه‌های افزودنی همراه یا شخص ثالث استفاده کنند.

ممکن است به این زودی شاهد میلیاردها استقرار Postgres نباشیم، همانطور که به طرز شگفت انگیزی برای SQLite صادق است، اما دستگاه های شما توانایی اجرای Postgres را دارند و به دلایلی به طور فزاینده ای، این کار را خواهند کرد. همه آن نمونه های Postgres ممکن است چه کاری انجام دهند؟

سیستم های فایل پیشرفته

از ستون InfoWorld 2003، داستان دو قاهره:

هیچ پیش‌بینی درمورد نابودی سیستم فایل آزمایش زمان را سپری نکرده است، و من در حال حاضر آن را انجام نمی‌دهم، اما مشاهده می‌کنم که پایگاه‌های داده SQL امروزی بسیار مجهزتر از اجداد خود برای غنی‌سازی سیستم فایل به طور جامع‌تر هستند. نسبت به SQLite بر اساس هر برنامه. برای مثال، ایده زمانی آینده‌نگر از اشیا به عنوان شهروندان درجه یک پایگاه داده، اکنون در قالب ستون‌های JSON واقعی شده است. و به‌ویژه Postgres، به لطف APIهای پسوند کاملاً باز خود، نه تنها داده‌های رابطه‌ای را با اشیاء JSON یکی می‌کند، بلکه داده‌های ارزش کلید، متن کامل، سلسله مراتبی، مکانی، سری زمانی و ستونی را نیز در بر می‌گیرد.

Balerina: یک زبان برنامه نویسی برای ابر

بین دو افراطی ریچارد هیپ – پایگاه داده مشتری/سرور و فرمت فایل برنامه – یک حد وسط وجود دارد: یک پایگاه داده محلی. هنگامی که Steampipe را روی رایانه ویندوز یا مک خود نصب می کنید، Postgres را نیز نصب می کنید. برای من، این یک تجربه چشم باز بوده است. Steampipe برای پرس‌جویی در APIها، Postgres را بسته‌بندی می‌کند، معیارهای انطباق، و تجسم داده های قابل دسترسی API . اما یک نمونه محلی از پایگاه داده همچنین می‌تواند انواع کارهای مدیریت داده را به روشی در سطح سیستم در مقایسه با روشی صرفاً برنامه کاربردی انجام دهد.

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

همگام سازی داده ها

در دنیایی که Postgres در همه جا وجود دارد، نمونه‌ها باید به روش‌های مختلف با نمونه‌های دیگر همگام شوند. Postgres مکانیسم های زیادی را برای انجام این کار ارائه می دهد. هنگام استفاده از ویژگی داخلی تکثیر جریانی داخلی، یک سرور اصلی داده ها را به صورت همزمان به یک یا چند گیرنده آماده به کار منتقل می کند. یکی دیگر از ویژگی‌های داخلی، ارسال گزارش، دسته‌ای از رکوردهای گزارش را به صورت ناهمزمان منتقل می‌کند. از حالت اولیه به حالت آماده به کار.

مثل همیشه، اکوسیستم توسعه قوی Postgres قابلیت‌های داخلی را افزایش می‌دهد. یک برنامه افزودنی شخص ثالث، pglogical، تکرار منطقی را برای ناشران غیر Postgres پیاده سازی می کند. و مشترکینی مانند Kafka و RabbitMQ. شما می توانید تعدادی راه حل دیگر را در این دسته بندی در حال گسترش پیدا کنید.

در همین حال، برنامه افزودنی postgres_fdw از داده‌های خارجی Postgres استفاده می‌کند. مکانیزم wrapperبرای اتصال جداول محلی و راه دور برای عملیات خواندن و نوشتن. به هر طریقی، یک نمونه Postgres که روی دستگاه‌های شما یا در ابرهای شخصی و تیمی شما اجرا می‌شود، می‌تواند با نمونه‌هایی که در جاهای دیگر اجرا می‌شوند همگام‌سازی شود.

یک برنامه کاربردی بدون زبان

دو نمونه غالب از زمان‌های اجرا بدون زبان عبارتند از JVM (ماشین مجازی جاوا) و زمان اجرا دات‌نت. هر دو زبان های برنامه نویسی اولیه – به ترتیب جاوا و سی شارپ – را فعال می کنند، اما هر دو زبان های دیگری را که از سیستم های نوع رایج و سرویس های زمان اجرا این موتورها استفاده می کنند، فعال می کنند. برای JVM، زبان های قابل توجه عبارتند از Groovy، Kotlin، Scala و Clojure. برای دات نت، آنها شامل F# و VB.NET هستند.

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

create function matches_humanities(course_name text) returns boolean as $$
  select
    string ~* any(array[
      'psych',
      'religio',
      'soci'
    ]);
$$ language sql;

=> select matches_humanities('Religion 202');

 matches_humanities
--------------------
 t
(۱ row)

در اینجا همان تابع نوشته شده در PL/Python، یک پسوند Postgres است که پایتون را راهی دیگر برای پیاده سازی توابع Postgres می کند.

create function matches_humanities(course_name text) returns boolean as $$
  import re
  regexes = [
    'psych',
    'religio',
    'soci'
  ]
  matches = [r for r in regexes if re.search(r, course_name, re.I)]
  return len(matches)
$$ language plpython3u;

نویسنده عبارت SELECT که این تابع را فراخوانی می‌کند نمی‌داند یا اهمیتی نمی‌دهد که این تابع به زبان مادری Postgres یا در PL/Python یا یکی دیگر از زبان‌های رویه‌ای موجود.

SpiderLightning: قابل حمل کردن برنامه های ابری WebAssembly

برنامه نویسان پایگاه داده در یک سن خاص با استفاده از رویه های ذخیره شده که در داخل پایگاه داده اجرا می شوند، با سرعت پایگاه داده، با دسترسی مستقیم به داده ها آشنا هستند. با پشتیبانی Postgres از رویه‌ها و توابع نوشته شده به زبان‌های مدرن، این تکنیک که اکنون نامشخص است، شایسته نگاهی دوباره است. SQL همیشه یک زبان ترکیبی بوده است: یک هسته رابطه ای که با کتابخانه ای از توابع تقویت شده است. وقتی می‌توانید کتابخانه‌ای از توابع را با استفاده از زبان انتخابی خود – Python، JavaScript، R- گسترش دهید – Postgres شروع به شبیه به نوع دیگری از سرور برنامه می‌کند.

به عنوان مثال، توابع نشان داده شده در بالا، مجموعه عبارات منظم را مستقیماً در کد تشکیل می دهند. یک نسخه قوی تر آنها را از جدول پایگاه داده منبع می کند. در رویکردی که اکنون مرسوم است که در یک فرآیند جداگانه اتفاق می افتد: اتصال به پایگاه داده، ارسال یک درخواست SQL به آن، باز کردن بسته بندی نتیجه. وقتی Postgres سرور برنامه است، می توانید به سادگی تابع را بازنویسی کنید تا از یک جفت جدول استفاده کنید.

select 
  *
from 
  course_names c
join
  humanities_patterns h
on c.course_name ~* h.pattern;

همانطور که قبلاً، نویسنده پرس و جو select matches_humanities('Religion 202') تفاوت را نمی داند.

توجه داشته باشید که توابع فقط نیازی به بازگرداندن مقادیر ساده مانند بولی در این مثالها ندارند. آنها همچنین می‌توانند توابع بازگشت‌دهنده تنظیم شوند که جداولی را که می‌توانید جستجو کنید و درست مانند جداول معمولی بپیوندید و به صورت اختیاری توسط تعریف نوع زبانی خنثی کنترل می شود. الف>. این رویکرد SQL را قادر می‌سازد تا با زبان‌های دیگر به روش‌هایی ترکیب شود که در غیر این صورت غیرممکن است.

علوم داده

متون علوم داده مملو از راهنماهایی است که نشان می‌دهد چگونه می‌توان ویژگی‌های اصلی SQL را در زبان‌هایی مانند Python و R که در بین دانشمندان داده محبوب هستند، دوباره پیاده‌سازی کرد. یک دستور معمول برای Python با وارد کردن داده ها از یک جدول SQL به یک Dataframe Pandas، ساختار هسته ای در قلب علم داده با طعم پایتون، شروع می شود، سپس نحوه اصطلاحات SQL را به اصطلاحات پانداهای مربوطه ترجمه کنید.

Angular 14 با فرم های تایپ شده، اجزای مستقل وارد می شود
SQL پاندا
* را از فرودگاه ها انتخاب کنید فرودگاه ها
انتخاب * از محدودیت ۳ فرودگاه airports.head(3)
شناسه را از فرودگاه هایی انتخاب کنید که در آن ident = ‘KLAX’ فرودگاه[airports.ident == ‘KLAX’].id
انتخاب نوع متمایز از فرودگاه airports.type.unique()
* را از فرودگاه هایی که iso_region = ‘US-CA’ در آن ها انتخاب کنید و تایپ کنید = ‘seaplane_base’ فرودگاه ها[(airports.iso_region == ‘US-CA’) & (airports.type == ‘ seaplane_base’)]
شناسه، نام، شهرداری را از فرودگاه‌هایی که iso_region = ‘US- CA’ و نوع = ‘large_airport’ فرودگاه ها[(airports.iso_region == ‘US-CA’) & (airports.type == ‘ large_airport’)][[‘ident’, ‘name’, ‘muncipality’]]

الگوی مشابه اغلب در ادبیات R ظاهر می‌شود: از یک آداپتور برای کشیدن داده‌ها از پایگاه داده SQL به یک ساختار جدول مانند مخصوص زبان استفاده کنید، سپس از اصطلاحات خاص زبان برای تکرار اصطلاحات SQL برای جستجو در آن استفاده کنید.

چرا از داده های SQL و اصطلاحات پرس و جو استاندارد SQL درجا استفاده نمی کنید؟ اگر Postgres روی ماشین محلی شما و در ابرهای شخصی و تیمی شما زندگی می‌کند و پایتون یا R را میزبانی می‌کند، می‌توانید با SQL پرس و جو کنید و از آن زبان‌ها (و کتابخانه‌های گسترده‌شان!) برای یادگیری ماشینی و قدرت‌های آماری ویژه‌ای که به آن‌ها می‌آورند استفاده کنید. جدول.

یک پلتفرم فراگیر برای کار با داده

من در جای دیگری نشان داده‌ام که چگونه Steampipe از بسته‌بندی‌های داده خارجی Postgres برای یکسان کردن دسترسی به APIها استفاده می‌کند. همچنین نمونه خوبی از Postgres جاسازی شده است که در کامپیوتر Windows، Mac، یا Linux شما در کانتینر، یا در ابر. نمونه Steampipe از Postgres یک افزونه را بارگیری می‌کند که بسته‌های داده خارجی را برای APIها پیاده‌سازی می‌کند، یک افزونه ارائه می‌کند. مدیری برای مدیریت مجموعه در حال رشد آداپتورها که با APIها صحبت می کنند و شامل سرور داشبورد برای تجسم پرس و جوهای آن APIها. و به عنوان نمونه ای از Postgres می تواند افزونه های دیگری را نیز بارگیری کند که قدرت پایگاه داده را در همه ابعاد گسترش می دهد: انواع داده ها، زبان ها، همگام سازی، ذخیره سازی.

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

شاید به این مطالب علاقمند باشید