القرص القائم على الهاشماب
-
27-09-2019 - |
سؤال
هل لدى Java (أم أن هناك مكتبة متوفرة) تتيح لي الحصول على hashmap القائمة على القرص؟ لا يلزم أن يكون ذريًا أو أي شيء ، ولكن سيتم الوصول إليه عبر مؤشرات ترابط متعددة ويجب عدم تعطله إذا كان هناك اثنان يصلان إلى نفس العنصر في نفس الوقت.
أي شخص يعرف أي شيء؟
المحلول
أيضاً خصائص ملفات أو بيركلي دي بي قد يكون ما تبحث عنه. ال java.util.Properties
نفسه ينفذ java.util.Map
ويوفر طرق ل load
من و store
إلى ملف. غالبًا ما يتم التوصية ببيركلي DB كخزانة بيانات زوجة مفتاح خفيفة الوزن.
نصائح أخرى
MAPDB
يوفر MAPDB Treemap المتزامن و HashMap المدعومة من تخزين القرص أو ذاكرة خارجية. إنه محرك قاعدة بيانات Java المدمجة السريعة وقابلة للتطوير وسهلة الاستخدام. إنه معبأ بميزات مثل المعاملات ، والتسلسل الفعال للمساحة ، وذاكرة التخزين المؤقت للمثيل ، وضغط/تشفير شفاف. كما أنه يحتوي على أداء رائع ينافسه محركات DB المضمنة الأصلية فقط.
JDBM2
القيمة المدمجة قيمة قاعدة بيانات Java.
يبدو أنك بحاجة إلى شيء قريب من ديسيبل خفيفة الوزن. هل نظرت إلى/نظرت 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
خارج الصندوق.