Mostafa Mansour
Mostafa Mansour

@Mostafa__Man

22 تغريدة 21 قراءة Nov 15, 2021
ثريد عن الداتابيز و ال CAP theorem و ايه الفرق بين الSQL و الNoSQL databases و العشق و الهجران
في البداية خلينا ناخد خط راجعة و نسأل ايه هي الداتابيز ؟
ببساطة هي المكان اللي بنخزن فيه الداتا و بنجيبها تاني .. الداتابيز ممكن يتقال عليها Database Management System (DBMS) و بتوفر CRUD operations
CRUD: اختصار ل
Create
Read
Update
Delete
و في حالة ان عندك distributed system .. ف بيبقى فيه أنواع مختلفة من الfailures .. زي ان السيرفر يقع .. الdisks تتمسح .. يبقى الnetwork connection وحش و الداتا تضيع .. إلخ
الtransaction بيبقى عبارة عن database operation .. و ساعات ممكن تقرا ان الdatabase is acid
Atomicity: all operations succeed or fail together, i.e. the transaction is an "atomic" unit
يا نعيش عيشة فل يا نموت إحنا الكل
Consistency
حشرحها ف التويتة اللي جاية
Isolation: transactions can be executed concurrently
و الtransactions مايتأثروش ببعض و المفروض الdeveloper و الdatabase architect ياخدوا بالهم من أي race condition
Durability: a "committed" transaction is persisted to memory
زي إن الصور اللي بنبعتها لبعض عالماسنجر بتفضل موجودة
الCAP theorem اختصار ل
Consistency, Availability, Partition tolerance
معنى الConsistency يعني لما أكتب حاجة في الداتابيز .. و بعدين أقراها .. حلاقي الvalue اللي أنا لسه كاتبها
Consistency is reading the most up to date data.
و دي بتبقى مطلوبة لو مثلا بتعمل payment application
لو في حسابي في البنك ١٠٠٠ جنيه لو أنا بعت فلوس لواحد صاحبي ٢٠٠ جنيه ، المفروض الداتابيز تupdate حسابي في البنك و تنقص المبلغ اللي أنا لسه باعته و تزود حساب صاحبي ٢٠٠ جنيه .. لو معملتش ده (أو اتأخرت مثلا دقيقة) .. ف أنا ممكن أبعت ٢٠٠ جنيه و حسابي ١٠٠٠ جنيه زي ما هو
ف أبعت ١٠٠٠ جنيه لواحد صاحبي تاني .. كده حسابي المفروض يبقى سالب ٢٠٠ و العملية متتمش لو الdatabase supports consistency .. لكن لو إتأخرت ف الUpdate operation ف أنا ممكن أستغل الثغرة دي و أنصب عالبنك.
و مش ف كل الحالات بيبقى لازم consistency .. ممكن الداتابيز تبقى eventual consistency.
الeventual consistency بتعمل الupdate برضه بس مش في ساعتها .. زي مثلا تعمل فولو لحد على تويتر بس الfollowers counter مبيزدش في ساعتها
Availability:
معناها إن كل request بيتم استقباله من خلال non-failing node في الsystem لازم ترد عالrequest بresponse .. حتى لو فيه فيه network issues و مفيش غير 2 nodes شغالين ف الdistributed system .. الrequest حيتم الرد عليه
أقصد ب node يعني database server
Partition Tolerance:
و ده معناه ان لو حصل فيه مشكلة ف الcommunication ما بين 2 nodes .. الsystem حكمل شغل عادي .. عشان كده بن replicate الداتا
الCAP theorem بقى بتقول ان أي داتابيز تقدر ت support حاجتين بس من ال٣ حاجات دول لكن استحالة مع بعض
الصورة من موقع educative.io
طب و ايه الفرق بين الSQL و الNoSQL databases ؟
الSQL أو الrelationship database هي بتوفر Consistency و Availability لكن مش بتsupport partition tolerance .. لو عندك كذا node
الSQL بتقبي كويسة في حالة الstartup عشان بيبقى عدد الusers قليل و أسهل ف التعلم و التعامل و مبتدوشش بالك بال scaling .. و حتى لو حبيت ت scale ف فيه framework ممكن تعملك sharding و تريح دماغك vitess.io
الSQL بتبقى تقليدية .. rows and columns مفيهاش أي إختراع .. انما الNoSQL ليها أنواع و بيتم استعمالها لما entities ميبقاش بينهم relationship
Key-Value Stores
و ده لما الvalue ميبقاش ليه schema معينة زي Redis, DynamoDB
Document Databases
ده بدل rows and columns بتبقى key and document .. بتشيل كمية كبيرة و ممكن مثلا تستعملها لو عندك ويبسايت زي pastebin.com
بحيث الkey يبقى الUserId و الdocument يبقى الكود زي MongoDB
Wide-Column Databases
و هنا بدل ما بنquery row by row .. بيبقى column by column .. ده بيبقى سريع جدا عشان في حالة انك بتدور على حاجة ف coloumn معين .. حتضر تقرا الrow كله في حالة الSQL .. لكن هنا انت بتقرا الcells بتاعة الcolumn بس زي Cassandra و HBase
Graph Databases
و ده بالظبط كأنك بتعمل Object Oriented Design .. و الentity بتبقى node و ليها edge بيمثل الrelationship .. مواقع زي فيسبوك و تويتر بستعملوها عشان يعملوا People who you may know و Who to follow
طب امتى نستعمل ايه ؟
استعمل SQL لو محتاج ACID support و لو الschema بتاعتك مش حتتغير .. بلاش تنط عالNoSQL على طول .. لحد النهاردة فيسبوك و يوتيوب بيخزوا الusers data in a SQL database :)
استعمل الNoSQL لو حات scale horizontally و الداتا كبيرة فحت و ملهاش structure و الschema حتتغير.
أتمنى أكون أفدتكم و لو حابب/ة تتعلموا أكتر عن الdatabase ف دي المصادر اللي ساعدتني
igotanoffer.com
youtube.com
youtube.com
youtube.com
youtube.com
و ده مقال في منتهى الروعة عن ازاي pinterest عملت scaling للSQL database بتاعتها
medium.com
بس كده and i hope you found this useful 😊

جاري تحميل الاقتراحات...