it-swarm.dev

DynamoDB ضد MongoDB NoSQL

أحاول معرفة ما الذي يمكنني استخدامه لمشروع مستقبلي ، نخطط للتخزين من حوالي 500 ألف سجل شهريًا في السنة الأولى وربما أكثر في السنوات القادمة ، هذا تطبيق رأسي لذلك لا داعي لاستخدام قاعدة البيانات لهذا ، وهذا هو السبب في أنني قررت اختيار تخزين بيانات noSQL.

كان الخيار الأول الذي يتبادر إلى ذهني هو mongo db حيث إنه منتج ناضج للغاية مع الكثير من الدعم من المجتمع ، ولكن من ناحية أخرى ، حصلنا على منتج جديد تمامًا يقدم خدمة مُدارة بأعلى أداء ، سأقوم بتطوير هذا تصفيق ولكن لا توجد خطة صيانة (على الأقل في الوقت الحالي) لذلك أعتقد أن ذلك سيكون ميزة كبيرة لأن Amazon توفر طريقة مرنة للتوسع.

إن اهتماماتي الرئيسية تتعلق ببنية الاستعلام ، ولم أطلع على إمكانات استعلام dynamoDB حتى الآن ، لكن بما أن تخزين بيانات k/v أشعر أن هذا قد يكون محدودًا أكثر من mongo db.

إذا كانت لدى شخص ما خبرة في نقل مشروع من mongoDB إلى DynamoDB ، فسيتم تقدير أي نصيحة تمامًا.

157
jack.the.ripper

لقد قمت مؤخرًا بترحيل MongoDB إلى DynamoDB ، وكتابة 3 مدونات لتبادل بعض الخبرة والبيانات حول الأداء والتكلفة.

الترحيل من MongoDB إلى AWS DynamoDB + SimpleDB

7 أسباب يجب عليك استخدام MongoDB على DynamoDB

3 أسباب يجب عليك استخدام DynamoDB على MongoDB

54
Mason Zhang

أعرف أن هذا قديم ، لكنه لا يزال يظهر عند البحث عن المقارنة. كنا نستخدم Mongo ، لقد انتقلنا بالكامل تقريبًا إلى Dynamo ، وهو خيارنا الأول الآن. ليس لأنه يحتوي على المزيد من الميزات ، لا. لدى Mongo لغة استعلام أفضل ، ويمكنك الفهرس داخل الهيكل ، وهناك الكثير من الأشياء الصغيرة. إن تفوق دينامو هو ما ذكره البروتوكول الاختياري في تعليقه: إنه أمر سهل. ليس لديك لرعاية أي خوادم. عندما تبدأ في إعداد حل مونغو المظلل ، يصبح الأمر معقدًا. يمكنك الذهاب إلى إحدى شركات الاستضافة ، لكن هذا ليس رخيصًا أيضًا. مع Dynamo ، إذا كنت بحاجة إلى مزيد من الإنتاجية ، فما عليك سوى النقر فوق زر. يمكنك كتابة البرامج النصية لتوسيع نطاق تلقائيا. عندما يحين وقت ترقية Dynamo ، يتم ذلك من أجلك. هذا هو كل الكثير من الإجهاد الثمين والوقت الذي لم تنفقه. إذا لم يكن لديك رجال عمليات مخصصون ، فإن Dynamo ممتاز.

لذلك نحن نذهب الآن دينامو بشكل افتراضي. ربما كان Mongo ، إذا كانت بنية البيانات معقدة بما يكفي لتبريرها ، ولكن ربما نعود إلى قاعدة بيانات SQL. Dynamo منفرد ، فأنت بحاجة حقًا إلى التفكير في كيفية بنائه ، وعلى الأرجح ستستخدم Redis في Elasticcache لجعله يعمل مع الأشياء المعقدة. لكن من المؤكد أنه من الجيد ألا تضطر إلى الاهتمام بها. أنت رمز. هذا هو.

159
CargoMeister

مع وجود 500 كيلو من المستندات ، لا يوجد سبب لتوسيع النطاق على الإطلاق. يمكن لجهاز كمبيوتر محمول نموذجي يحتوي على SSD وذاكرة وصول عشوائي سعة 8 جيجا بايت أن يقوم بسهولة بعشرة ملايين من السجلات ، لذلك إذا كنت تحاول الانتقاء نظرًا لتوسيع نطاق اختيارك ، فلا يهم حقًا. أود أن أقترح عليك اختيار أكثر الأشياء التي تفضلها ، وربما يمكنك العثور على أكثر أنواع الدعم عبر الإنترنت.

55
Derick

لمقارنات النظرة العامة السريعة ، أحب موقع الويب هذا ، الذي يحتوي على العديد من صفحات المقارنة ، مثل AWS DynamoDB vs MongoDB؛ http://db-engines.com/en/system/Amazon+DynamoDB٪3BMongoDB

21
AnneTheAgile

إجابة قصيرة: ابدأ بـ SQL وأضف NoSQL فقط عند الحاجة. (ما لم تكن بحاجة إلى أي شيء يتجاوز الاستفسارات البسيطة جدًا)

تجربتي الشخصية: لم أستخدم MongoDB للاستعلامات ، ولكن اعتبارًا من أبريل 2015 ، لا تزال DynamoDB مشلولة للغاية عندما يتعلق الأمر بأي شيء يتجاوز أهم استعلامات المفتاح/القيمة. أنا أحب ذلك للأشياء الأساسية ولكن إذا كنت تريد لغة الاستعلام ، فابحث عن حل حقيقي لقاعدة بيانات SQL.

في DynamoDB ، يمكنك الاستعلام عن علامة تجزئة أو مفتاح تجزئة ونطاق ، ويمكنك الحصول على فهارس عمومية متعددة. أقوم بإجراء استعلامات على جدول واحد مع 4 معلمات تصفية ممكنة وفرز النتائج ، ويدعم هذا (بالكاد) من خلال استخدام الفهارس الثانوية العالمية مع تعبيرات المرشح. تكمن المشكلة عند محاولة الحصول على إجمالي النتائج المطابقة للمرشح ، ولا يمكنك فقط البحث عن العناصر العشرة الأولى المطابقة للعامل التصفية ، بل إنه يتحقق من 10 عناصر وقد تحصل على 0 نتائج صالحة تجبرك على الاستمرار في المسح من مفتاح الاستمرار - ألم في الرقبة ويستهلك الكثير من الجدول الخاص بك قراءة الحصة لسيناريو بسيط.

لكي تكون محددًا حول مشكلة الحد مع عوامل التصفية في الاستعلام ، يكون ذلك من المستندات ( http://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#ScanQueryLimit ):

 في استجابة ، تُرجع DynamoDB جميع النتائج المطابقة ضمن 
 نطاق قيمة الحد. على سبيل المثال ، إذا قمت بإصدار استعلام 
 أو طلب مسح ضوئي بقيمة حد قدرها 6 ودون تعبير مرشح 
 ، تُرجع العملية العناصر الستة الأولى في الجدول 
 الذي تطابق المعلمات الطلب. إذا قمت أيضًا بتوفير 
 FilterExpression ، فتُرجع العملية العناصر الموجودة ضمن 
 العناصر الستة الأولى في الجدول التي تطابق متطلبات المرشح. 

استنتاجي هو أن الاستعلامات التي تتضمن FilterExpressions قابلة للاستخدام فقط في حالات نادرة جدًا وغير قابلة للتطوير لأن كل استعلام يمكنه بسهولة قراءة معظم أو كل جدولك الذي يستهلك الكثير من وحدات DynamoDB للقراءة. بمجرد استخدام الكثير من وحدات القراءة ، ستشعر بالاختناق وترى الأداء الضعيف.

رأي الخبراء: في قمة AWS في 9 أبريل 2015 ، بريت هولمان ، مدير هندسة الحلول ، AWS في حديثه عن التوسع إلى أول 10 ملايين مستخدم من دعاة بدءك من قاعدة بيانات SQL ثم استخدام NoSQL فقط عندما وإذا كان ذلك منطقيًا. لأنك ستحتاج عاجلاً أم آجلاً إلى خادم SQL في مكان ما في مجموعتك. شرائحه موجودة هنا: http://www.slideshare.net/AmazonWebServices/deep-dive-scaling-up-to-your-first-10-million-users See slide 28.

16
Deemoe

اخترنا مجموعة من Mongo/Dynamo لمنتج الرعاية الصحية. يسمح mongo بشكل أساسي بالبحث بشكل أفضل ، لكن Dynamo المستضافة رائع لأن HIPAA متوافق مع أي عمل إضافي. لذلك نحن نستضيف الجزء mongo مع عدم وجود بيانات شخصية على الإعداد القياسي والسماح للأمازون للتعامل مع جزء HIPAA من حيث البنية التحتية. يمكننا الاستعلام عن بعض العناصر من mongo التي تعرض المستندات التي تحتوي على مؤشرات (ID's) لوثيقة Dynamo ذات الصلة.

السبب الرئيسي وراء اختيارنا للقيام بذلك باستخدام mongo بدلاً من استضافة التطبيق بأكمله على dynamo كان لسببين. أولاً ، نحتاج إلى إعداد عمليات البحث القائمة على الموقع والتي تعد ميزة mongo رائعة في ذلك الوقت وفي ذلك الوقت ، لم يكن Dynamo كذلك ، لكن لديهم خيارًا الآن.

ثانياً ، كانت بعض المستندات غير مهيكلة ولم نكن نعلم مسبقًا ما هي البيانات ، لذلك على سبيل المثال يتيح للمستخدم إدخال مستند في مجموعة "النموذج" مثل هذا: {"اسم المستخدم": "user1" ، " البريد الإلكتروني ":" [email protected] "}. ويضع مستخدم آخر هذا في نفس المجموعة {"phone": "813-555-3333" ، "location": [28.1234 ، -83.2342]}. مع mongo ، يمكننا البحث في أي من هذه الحقول الديناميكية وغير المعروفة في أي وقت ، باستخدام Dynamo ، يمكنك القيام بذلك ولكن يجب عليك إنشاء فهرس في كل مرة يتم فيها إضافة حقل جديد تريد البحث فيه. لذلك إذا لم يكن لديك حقل هاتف في مستند Dynamo الخاص بك من قبل وقبل كل شيء فجأة ، يضيفه أحد ، وهو غير قابل للبحث بالكامل.

الآن هذا يثير نقطة أخرى التي ذكرتها. في بعض الأحيان ، لا يعني اختيار الحل المناسب للوظيفة دائمًا اختيار أفضل منتج للوظيفة. على سبيل المثال ، قد يكون لديك عميل يحتاج وسيستخدم النظام الذي أنشأته لمدة تزيد عن 10 سنوات. قد يكون استخدام حل SaaS/IaaS جيدًا بما يكفي لإنجاز المهمة خيارًا أفضل حيث يمكنك الاعتماد على Amazon للحفاظ على أنظمتها والحفاظ عليها على المدى الطويل.

14
Steffan Perry

لقد عملت على حد سواء ونوع من المعجبين على حد سواء.

ولكن عليك أن تفهم متى تستخدم ما ولأي غرض.

لا أعتقد أنها فكرة رائعة أن تنقل كل قاعدة البيانات الخاصة بك إلى DynamoDB ، لأن الاستفسار صعب باستثناء المفاتيح الأساسية والثانوية ، والفهرسة محدودة ، والمسح الضوئي في DynamoDB أمر مؤلم.

أود أن أذهب إلى نوع هجين من قواعد البيانات ، حيث يجب أن تكون هناك بيانات كثيرة قادرة على الاستعلام موجودة في MongoDB ، مع كل ميزاتها التي لن تشعر أنك مقيد أبدًا بتقديم تحسينات أو تعديلات.

DynamoDB يضيء بسرعة (أسرع من MongoDB) لذلك غالباً ما يتم استخدام DynamoDB كبديل للجلسات في التطبيقات القابلة للتطوير. تقترح أفضل ممارسات DynamoDB أيضًا أنه في حالة وجود الكثير من البيانات الأقل استخدامًا ، انقلها إلى جدول آخر.

لنفترض أن لديك مقالات أو خلاصات. من المرجح أن يبحث الأشخاص عن أشياء الأسبوع الماضي أو أشياء هذا الشهر. فرص نادرة حقًا للأشخاص في زيارة بيانات عمرها عامين. لهذه الأغراض ، تفضل DynamoDB تخزين البيانات حسب الشهر أو السنوات في جداول مختلفة.

DynamoDB غير قابل للتحجيم على ما يبدو ، شيء عليك القيام به يدويًا في MongoDB. ومع ذلك ، ستفقد أداء DynamoDB ، إذا كنت لا تفهم حول قسم الإنتاجية وكيف يعمل التحجيم خلف المشهد.

يجب استخدام DynamoDB عندما تكون السرعة حرجة ، من ناحية أخرى فإن MongoDB لديه الكثير من الأيدي والميزات ، وهو شيء يفتقر إليه DynamoDB.

على سبيل المثال ، يمكنك الحصول على مجموعة النسخ متماثلة من MongoDB بطريقة أن أحد النسخ المتماثلة يحتفظ بمثيل بيانات يبلغ 8 ساعات (أو أيا كان) قديمًا. مفيد حقًا ، إذا أفسدت شيئًا كبيرًا في قاعدة بياناتك وتريد الحصول على البيانات كما كانت من قبل.

هذا رأيي رغم ذلك.

8
Rahul Kumar

ضع في اعتبارك ، لقد جربت فقط مع MongoDB ...

من ما قرأته ، قطعت DynamoDB شوطًا طويلًا من حيث الميزات. اعتادت أن تكون متجرا ذات قيمة أساسية فائقة مع قدرات تخزين واستعلام محدودة للغاية. لقد نمت منذ ذلك الحين ، والآن تدعم أحجام أكبر للوثائق + دعم JSON و المؤشرات الثانوية العالمية . الفجوة بين ما تقدمه DynamoDB و MongoDB من حيث الميزات تزداد أصغر مع كل شهر. يتم توسيع الميزات الجديدة من DynamoDB على هنا .

الكثير من مقارنات MongoDB مقابل DynamoDB قديمة بسبب الإضافة الأخيرة لميزات DynamoDB. ومع ذلك ، هذا المنشور يوفر بعض النقاط المقنعة الأخرى لاختيار DynamoDB ، أي أنه بسيط ، صيانة منخفضة ، وغالبًا ما يكون منخفض التكلفة. مناقشة أخرى هنا من خيارات قاعدة البيانات كانت مثيرة للاهتمام للقراءة ، على الرغم من أنها قديمة بعض الشيء.

الوجبات الجاهزة: إذا كنت تقوم باستعلامات جدية لقاعدة البيانات أو تعمل بلغات غير مدعومة من DynamoDB ، فاستخدم MongoDB. خلاف ذلك ، العصا مع DynamoDB.

7
AndrewSouthpaw