ACID
در ابتدا باید بگیم ترنزکشن چیه؟ ترنزکشن یک مجموعه کوئری که به صورت یه unit of work رفتار میکنه و نمیتونه split بشه. و ترنزکشن یه چرخه داره
در ابتدا باید بگیم ترنزکشن چیه؟ ترنزکشن یک مجموعه کوئری که به صورت یه unit of work رفتار میکنه و نمیتونه split بشه. و ترنزکشن یه چرخه داره
یه چیزی که خیلی وقتا توی دنیای تکنولوژی دربارهاش صحبت میکنیم، بحث availability یا همون در دسترس بودن سیستمه. حالا اگه یه اپلیکیشن داری، سوال اینه که کاربرات چه درصدی از زمان میتونن ازش استفاده کنن؟ اینجاست که بحث اون ۹۹ درصدای معروف میاد وسط.
"بهجای اینکه همیشه دادهها کاملاً درست و هماهنگ باشن، بهتره سریعتر به کاربرا پاسخ بدیم، حتی اگه بعضی از دادهها موقتی ناهماهنگ باشن!"
میاد مقدار مارو هش میکنه و توی یه خونه میزاره. مقدار اولیه اش ۶۴ بایته و اگر توی اون خونه عدد ۱ باشه یعنی اون توی دیتابیس وجود داره یا یکی هش اش شبیه اشه وجود داره، پس:
در نرمافزار و بهویژه در سیستمعاملها، منظور از burst time (یا CPU burst time) مدت زمانیه که یک پردازش (process) یا thread بدون وقفه از CPU استفاده میکنه
Fsync
کشینگ یه تکنیکه که از محاسبات قبلی استفاده کنیم و لازم نباشه دوباره سیستم رو درگیر کنیم
وقتی یه سیستم توزیعشده داری، مثل یه کلاستر از سرورها که درخواستها رو بین خودشون تقسیم میکنن، باید یه راهی باشه که دادهها رو طوری پخش کنی که هم کارآمد باشه، هم اگه یه سرور از مدار خارج شد، اوضاع بهم نریزه. اینجاست که Consistent Hashing و Hash Ring به درد میخورن.
اCyclomatic Complexity (پیچیدگی حلقوی) یک معیار در مهندسی نرمافزار است که تعداد مسیرهای مستقل در کد را اندازهگیری میکند. این معیار به ما کمک میکند تا پیچیدگی منطقی یک تابع یا ماژول را ارزیابی کنیم و بفهمیم که چقدر سخت خواهد بود که آن را تست یا نگهداری کنیم. یک فرمول داره ولی لینترها معمولا اینو دارن
خیلی وقتها میخواهیم تعداد یکتای آیتمها رو بدون اینکه همهشون رو ذخیره کنیم، تخمین بزنیم. اینجاست که HyperLogLog میاد کمکمون! 🧑💻
ایندکسها درDB برای افزایش سرعت جستجوها استفاده میشوند. مثل فهرست یک کتاب عمل میکنند که دسترسی سریع به دادهها را ممکن میسازد.
اInter Process Communication) IPC) به روشهایی میگن که Processها در یک سیستم عامل میتوانند با هم ارتباط برقرار کنند و دادهها را بین خودشان به اشتراک بگذارند. از آنجا که پردازهها معمولاً فضای حافظه مستقل دارند، سیستمعامل مکانیسمهای مختلفی برای ارتباط بین آنها فراهم کرده است.
این مشکلات در دیتابیس وقتی اتفاق میافتند که تراکنشهای همزمان روی دادههای یکسان تأثیر بگذارند و ایزولهسازی به اندازه کافی قوی نباشد.
با لاگها مثل stream رفتار کن
لاگ روتیشن یه فایل Log داری که هر روز کلی اطلاعات توش میره و همش بزرگ و بزرگتر میشه. بعد از یه مدت دیگه نه میتونی بخونی، نه میتونی ازش استفاده کنی! log rotation یعنی به طور خودکار این فایلهای لاگ رو تقسیم کنیم. مثلاً روزانه یا هفتگی یه فایل جدید درست میکنیم و قدیمیا رو آرشیو میکنی. چرا؟ چون: سرعت کم میشه و پیدا کردن لاگی که میخوای سخت میشه
ا owasp یه سری استاندارد امنیتی داره که برای داشتن برنامه امن باید رعایت کنیم.
پارتیشنبندی توی دیتابیس یه جورایی مثل این میمونه که بخوای یه انباری خیلی بزرگ رو به چند بخش تقسیم کنی، طوری که هر بخش مخصوص یه سری از وسایل باشه. حالا چرا این کارو میکنیم؟ چون وقتی چیزی رو لازم داری، دیگه کل انباری رو نمیگردی، فقط میری همون بخشی که وسایل مرتبط توش هست، پس سریعتر پیدا میکنی.
وقتی از pipeline تو ردیس استفاده میکنی، در واقع داری چندتا دستور رو پشت سر هم میفرستی به ردیس بدون اینکه منتظر بمونی تا جواب هرکدوم برگرده. یعنی یه جورایی همه کاراتو یهجا میریزی تو صف، ردیس همهشونو با هم میگیره و بعدم یهجا جوابتو میده. این کار باعث میشه زمان رفتوبرگشت کم بشه و سرعت خیلی بیشتر شه، مخصوصاً وقتی میخوای تعداد زیادی کلید رو بخونی یا بنویسی.
رپلیکا یعنی ما چندتا instance از دیتابیسمون بالا داشته باشیم برای Load Balance دیتابیسمون. حالا چند نوع رپلیکا داریم که هرکدوم مزایا و معایب خودشونو دارن.
شاردینگ چیه؟ اصلاً چرا شاردینگ کنیم؟!
۱. S - Single Responsibility Principle (SRP)
1. استفاده از offset برای pagintaion باعث میشه همه موارد قبلش رو بگیره و موارد لازم رو بده و بقیه رو دراپ کنه. خیلی بهتره که برای ایدی از فیلدهای ترتیبی استفاده کنیم مثل [[Twitter Snowflake]] تا uuid تا بتونیم همچین کوئری بزنیم: