سؤال

هل لدى Java (أم أن هناك مكتبة متوفرة) تتيح لي الحصول على hashmap القائمة على القرص؟ لا يلزم أن يكون ذريًا أو أي شيء ، ولكن سيتم الوصول إليه عبر مؤشرات ترابط متعددة ويجب عدم تعطله إذا كان هناك اثنان يصلان إلى نفس العنصر في نفس الوقت.

أي شخص يعرف أي شيء؟

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

المحلول

أيضاً خصائص ملفات أو بيركلي دي بي قد يكون ما تبحث عنه. ال java.util.Properties نفسه ينفذ java.util.Map ويوفر طرق ل load من و store إلى ملف. غالبًا ما يتم التوصية ببيركلي DB كخزانة بيانات زوجة مفتاح خفيفة الوزن.

نصائح أخرى

MAPDB

يوفر MAPDB Treemap المتزامن و HashMap المدعومة من تخزين القرص أو ذاكرة خارجية. إنه محرك قاعدة بيانات Java المدمجة السريعة وقابلة للتطوير وسهلة الاستخدام. إنه معبأ بميزات مثل المعاملات ، والتسلسل الفعال للمساحة ، وذاكرة التخزين المؤقت للمثيل ، وضغط/تشفير شفاف. كما أنه يحتوي على أداء رائع ينافسه محركات DB المضمنة الأصلية فقط.

http://www.mapdb.org/

JDBM2

القيمة المدمجة قيمة قاعدة بيانات Java.

https://code.google.com/p/jdbm2/

يبدو أنك بحاجة إلى شيء قريب من ديسيبل خفيفة الوزن. هل نظرت إلى/نظرت Java DB؟ سيكون DB Light مع جدول واحد مفهرس في الأساس خريطة تجزئة آمنة على القرص.

JDBM2 هو بالضبط ما تطلبه. يوفر Hashmap مدعومًا بتخزين القرص (من بين خرائط أخرى). بسرعة ، آمنة الخيط وواجهة برمجة التطبيقات بسيطة حقًا.

مشروع فولدمورت هو أيضا حقا سريعة/قابلة للتطوير/النسخ المتماثل "hashmap". يتم استخدامه في LinkedIn الأداء جيد أيضًا:

اقتباس من موقعهم:

فيما يلي الإنتاجية التي نراها من عميل متعدد التشبسيات يتحدث إلى خادم واحد حيث تكون مجموعة البيانات "الساخنة" في الذاكرة تحت الحمل الثقيل بشكل مصطنع في مختبر الأداء لدينا:

يقرأ: 19،384 req/sec
يكتب: 16،559 req/sec

خريطة كرونيكل الأدوات ConcurrentMap ويستمر البيانات إلى القرص عبر رسم خرائط لذاكرة إلى ملف.

خريطة Chronicle تشبه إلى حد كبير MAPDB (يوفر واجهة برمجة تطبيقات مشابهة و Map واجهة) ، لكن خريطة Chronicle مرات أسرع من MAPDB ولديه توافق أفضل بكثير (تستخدم MAP Chronicle أقفال تدور متعددة المستويات مخططة للغاية).

لذا فإن السنة الآن 2016. وإذا كان أي شخص يتطلع إلى معالجة هذه المشكلة ، فقد اكتشفت أن API البيئات المنخفضة المستوى في Xodus من JetBrains يعمل لهذا الغرض ، باستخدامهم computeInTransaction متجر Lambdas.

منحت ، إنها ليست بقعة مثل وجود نقي Map على سبيل المثال ، لكنه عمل في حالة الاستخدام الخاصة بي.

خيار آخر آخر هو الاستخدام H2 MVStore محرك التخزين وهو ما يفعل نفس الشيء ، لكنني أعتقد أنه مصمم أكثر تجاه قاعدة البيانات نفسها.

هتافات!

في 2018 أخف ثبات key value المتجر هو قاعدة بيانات H2 مع MVStore:

MVSTORE هو متجر ثابت من القيمة المهيكلة. من المخطط أن يكون النظام الفرعي للتخزين التالي لـ H2 ، ولكن يمكن أيضًا استخدامه مباشرة داخل التطبيق ، دون استخدام JDBC أو SQL.

  • MVSTORE تعني "متجر متعددة النسخ".

  • يحتوي كل متجر على عدد من الخرائط التي يمكن الوصول إليها باستخدام واجهة java.util.map.

  • يتم دعم كل من الثبات القائم على الملفات والعملية في الذاكرة.

  • يهدف إلى أن تكون سريعة وبسيطة الاستخدام وصغيرة.

  • يتم دعم عمليات القراءة والكتابة المتزامنة.

  • يتم دعم المعاملات (بما في ذلك المعاملات المتزامنة والالتزام ثنائي الطور).

  • الأداة معيارية للغاية. وهو يدعم أنواع البيانات القابلة للتوصيل والتسلسل ، والتخزين القابل للتوصيل (إلى ملف ، إلى ذاكرة خارجية) ، وتطبيقات خريطة قابلة للتوصيل (B-Tree ، R-Tree ، Tree B-Tree حاليًا) ، وتخزين Blob ، وتجريد نظام الملفات إلى دعم الملفات المشفرة والملفات zip.

H2 واردة أيضًا في مكتبة واحدة من 1.8 meg

نظرت أيضًا إلى:

  • MAPDB (13 meg التبعيات)
  • كرونيكل خريطة (5.5 meg التبعيات - بسرعة موزعة اختياريا)
  • LMDBJAVA (2 meg تبعيات جافا + lmdb C Library) - أسرع تنفيذ ولكن ليس thread safe خارج الصندوق.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top