سؤال

أحتاج إلى قاعدة بيانات أساسية سريعة وموثوقة وفعالة لذاكرة لنظام التشغيل Linux. مفاتيح بلدي حوالي 128 بايت، والحد الأقصى لحجم القيمة يمكن أن يكون 128k أو 256k. يجب ألا يستخدم النظام الفرعي لقاعدة البيانات أكثر من 1 ميغابايت من ذاكرة الوصول العشوائي. إجمالي حجم قاعدة البيانات هو 20 جرام (!)، ولكن يتم الوصول إلى جزء صغير عشوائي صغير من البيانات في وقت واحد. إذا لزم الأمر، يمكنني نقل بعض البيانات النقط من قاعدة البيانات (إلى الملفات العادية)، لذلك يحصل حجم يصل إلى 2 غيغابايت كحد أقصى. يجب أن تنجو قاعدة البيانات من تعطل النظام دون أي خسارة في البيانات غير المعفاة مؤخرا. سآخذ حوالي 100 مرة يقرأ المزيد من الكتابة. إنه زائد إذا كان يمكن استخدام جهاز كتلة (بدون نظام ملفات) كتخزين. لا أحتاج إلى وظائف خادم العميل، مجرد مكتبة. أحتاج إلى ارتباطات بيثون (ولكن يمكنني تنفيذها إذا لم تكن متوفرة).

الحلول التي يجب أن أفكر فيها، والذي تنصح به؟

المرشحين الذين أعرفهم الذين يمكنهم العمل:

  • مجلس الوزراء طوكيو (ارتباطات بيثون في بيتك, ، أنظر أيضا رمز المثال PYTC, وتدعم HATHS و B + الأشجار وملفات سجل المعاملات والمزيد، تم إصلاح حجم مجموعة دلو في وقت إنشاء قاعدة البيانات؛ يجب على الكاتب إغلاق الملف لإعطاء الآخرين فرصة؛ الكثير من الكتابات الصغيرة مع إعادة فتح الملف لكل منها بطيئة للغاية؛ يمكن لخادم الطاغية المساعدة في الكثير من الكتابات الصغيرة؛ مقارنة السرعة بين مجلس الوزراء طوكيو، طوكيو الطاغية وبيركلي ديسيبل)
  • VSDB. (آمنة حتى على NFS، دون قفل؛ ماذا عن الحواجز ؟؛ تحديثات بطيئة للغاية، ولكن ليس بطيئا كما هو الحال في CDB؛ الإصدار الأخير في عام 2003)
  • berkeleydb. (يوفر استعادة التحطم؛ يوفر المعاملات؛ ال bsddb وحدة بيثون توفر الارتباطات)
  • سامبا tdb. (مع المعاملات وملابس بيثون، بعض المستخدمين من ذوي الخبرة الفساد, ، بعض الأحيان mmap()S الملف كله، repack تتضاعف العملية في بعض الأحيان حجم الملف، وتنتج حالات إخفاقات غامضة إذا كانت قاعدة البيانات أكبر من 2G (حتى على أنظمة 64 بت)، وتنفيذ نظام المجموعة (CTDB.) أيضا متوفر؛ الملف ينمو كبير جدا بعد الكثير من التعديلات؛ يصبح الملف بطيئا جدا بعد الكثير من خلاف التجزئة؛ لا توجد طريقة مدمجة لإعادة بناء الملف؛ تحديثات متوازية سريعة جدا عن طريق قفل دلاء تجزئة الفردية)
  • aodbm (إلغاء - فقط حتى ينجو من تعطل النظام، مع ارتباطات بيثون)
  • hamsterdb. (مع ارتباطات بيثون)
  • ج- شجرة (الحل التجاري الناضج، متعدد الاستخدامات مع الأداء العالي، لديه طبعة مجانية مع انخفاض وظيفة)
  • القديم tdb. (من عام 2001)
  • Bitcask. (تسجيل الدخول، مكتوب في ارلوانغ)
  • مختلف تطبيقات DBM الأخرى (مثل GDBM، NDBM، QDBM ،، Perl's SDBM أو Ruby's؛ ربما ليس لديهم استعادة تحطم مناسبة)

لن أستخدم هذه:

  • memcachedb. (خادم العميل، يستخدم bereleleydb كخلفية)
  • CDB. (يحتاج إلى تجديد قاعدة البيانات بأكملها على كل كتابة)
  • http://www.wildsparx.com/apbcdb/ (كما سبق)
  • redis. (يحتفظ قاعدة البيانات بأكملها في الذاكرة)
  • sqlite. (يصبح بطيئا للغاية بدون مكنسة كهربائية دورية، راجع الإكمال التلقائي في شريط الموقع في Firefox 3.0، على الرغم من إصدارات 3.1 واسمحوا ل SQLite auto_vacuumعمل؛ احذر: يمكن أن تكون معاملات الكتابة الصغيرة بطيئة للغاية؛ احذر: إذا كانت عملية مزدحمة تقوم بعمل العديد من المعاملات، فقد تجويع العمليات الأخرى، ولا يمكنها أبدا الحصول على القفل)
  • mongodb. (ثقيلا جدا، يعالج القيم ككائنات مع الهيكل الداخلي)
  • Firebird. (RDBMS مقرها SQL، ثالثا جدا)

لمعلوماتك، أ مقال مؤخرا حول قواعد بيانات القيمة الرئيسية في مجلة لينكس.

لمعلوماتك، قائمة البرمجيات القديمة

لمعلوماتك، أ مقارنة سرعة Memcachedb، Redis و Tokyo Tyrant مجلس الوزراء

أسئلة ذات صلة على Stackoverflow:

هل كانت مفيدة؟

المحلول

لقد حظت حظا سعيدا في حل حكومة طوكيو / PYTC. إنه سريع جدا (أسرع قليلا من استخدام الوحدة النمطية باستخدام anydbm في تطبيقي)، سواء للقراءة والكتابة (على الرغم من أنني سأفعل المزيد من القراءة الأخرى). كانت المشكلة بالنسبة لي وثائق المتقشف عن ارتباطات بيثون، ولكن يوجد رمز مثال كاف لمعرفة كيفية القيام بما تحتاج إلى القيام به. بالإضافة إلى ذلك، يعد Tokyo Cabinet سهل التثبيت (كما هي Bython Bindings)، لا يتطلب خادم (كما ذكر) ويبدو أنها مدعومة بنشاط (مستقرة ولكن لم تعد تحت التطوير النشط). يمكنك فتح الملفات في وضع القراءة فقط، مما يسمح بالوصول المتزامن أو وضع القراءة / الكتابة، مما يمنع العمليات الأخرى من الوصول إلى قاعدة البيانات.

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

(ومع ذلك، سيكون من المفيد للآخرين إذا شاركت في ما انتهى الأمر بالعمل الأفضل لك، ولماذا اخترت هذا الحل على الآخرين!)

نصائح أخرى

LMDB هي قاعدة بيانات أكثر كفاءة في الذاكرة حولهاhttp://symas.com/mdb/inmem/

وأثبت أيضا أنه الأكثر موثوقية - مقاومة للتعويض تماما.http://wisdom.cs.wisc.edu/workshops/spring-14/talks/thanu.pdf.

من تلك التي ذكرتها، وثقت حكومة طوكيو قضايا الفسادhttps://www.google.com/search؟q=cfengine_tokyo+cabinet+ctruption.

يحتوي Berkeleydb أيضا على قضايا الفساد الموثقة جيدا، وكذلك Bitcask. (و Bitcask هو DB في الذاكرة فقط على أي حال، لا فائدة من فائدة RAM 1MB.)

تتميز LMDB أيضا بدعم جيد في بيثون، مع وجود ارتباطات مختلفة.https://github.com/dw/py-lmdb/ https://github.com/tspurway/pymdb-lightning.

إخلاء المسؤولية - أنا مؤلف LMDB. ولكن هذه الحقائق موثقة: LMDB هي مخزن المفتاح / الأكثر كفاءة والأكثر كفاءة وأكثر موثوقية في العالم ولا شيء آخر يأتي في أي مكان قريب.

CDB يمكن التعامل مع أي قاعدة بيانات تصل إلى 4 جيجابايت، مما يجعلها صغيرة جدا عن المادة 20GB في متناول اليد.

Riak يعمل على Linux، ويسمح لك بإضافة العقد ديناميكيا

ماذا عن Python 3.0's dbm.ndbm؟

اقتراح آخر هو tdb. (جزء من مشروع سامبا). لقد استخدمتها من خلال tdb. الوحدة، ومع ذلك لا أستطيع أن أقول لقد اختبرت موثوقيتها في الأعطال؛ المشاريع التي استخدمتها في لم يكن لها مثل هذه المتطلبات، ولا يمكنني العثور على الوثائق ذات الصلة.

ماذا عن sqlite؟

لقد استخدمت Bsddb.hashlib () مع بيثون، عملت جيدة جدا.

قد ترغب DJBCDB., ، التي لديها الخصائص التي تذكرها.

في استعلمي لقاعدة بيانات على غرار ISAM (مماثلة)، تلقيت أيضا اقتراحات للإصدار المدمج من Firebird. و غليظ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top