سؤال

أحتاج إلى أفكار لتنفيذ آلية تخزين/قاعدة بيانات/تخزين عالية الأداء (حقًا) في الذاكرة في Java.في نطاق تخزين أكثر من 20000 كائن Java، يتم تحديثها كل 5 ثوانٍ أو نحو ذلك.
بعض الخيارات التي أنا منفتح عليها:

تركيبة JDBC/قاعدة بيانات نقية

JDO

مجموعة JPA/ORM/قاعدة البيانات

قاعدة بيانات الكائنات

آليات التخزين الأخرى

ما هو أفضل خيار لي؟ما هي تجاربك؟

يحرر:أحتاج أيضًا إلى أن أكون قادرًا على الاستعلام عن هذه الكائنات

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

المحلول

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

إذا انها نفس المجموعة من 20000 الأشياء، أو على الأقل ليس 20000 كائنات جديدة كل 5 ثوان ولكن الكثير من التغييرات، قد تكون أفضل حالا cacheing التغييرات والكتابة بشكل دوري التغييرات في دفعة واسطة (التحديثات دفعة JDBC هي أسرع بكثير من التحديثات الصف الفردية). يعتمد على ما إذا كنت بحاجة الى بعضنا الكتابة أن تكون ملفوفة transactionally، وعما إذا كان عليك ان تحصل على سجل من سجلات تغيير أو تغييرات الإجمالية فقط.

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

نصائح أخرى

أنصح بشدة H2.هذا نوع من إصدار "الجيل الثاني" من HSQLDB الذي قام به أحد المؤلفين الأصليين. H2 يسمح لنا باختبار طبقة DAO الخاصة بنا دون الحاجة إلى قاعدة بيانات PostgreSQL فعلية، وهي مذهل.

هناك مجموعة نشطة على الإنترنت وقائمة بريدية، والمؤلف توماس مولر مستجيب للغاية للاستفسارات (هاه، تورية صغيرة هناك).

وأنا لا أعرف إذا كان هذا هو أسرع خيار، ولكن لقد كنت راضيا جدا مع H2 كلما كنت استخدمه. مكتوب من قبل نفس الشخص الذي كتب أصلا فرط (الذي أصبح فيما بعد HSQLDB).

وثمة خيار آخر أن يزعم أنه سريع جدا هو Prevayler .

ووقليلا من مسألة قديمة، ولكن في هذه الأيام هناك مجموعة كبيرة من قواعد البيانات التي لديها مستوى أداء 20000 / ثانية. قاعدة البيانات التي لاختيار يعتمد على بنية البيانات ونوع من الاستفسارات التي ترغب في أن تكون القرارات. ويتوقف أيضا على الحجم الإجمالي.

وكان لدينا مشكلة مماثلة مع حجم كبير من بيانات السلاسل الزمنية، حوالي 300،000 تفصيل / ثانية وانتهى كتابة NFSdb ، مع API يكفي بسيطة وأداء لائق. ويمكن أن تفعل حوالي 2،000،000 كائن يكتب / ثانية وفعلنا بعيدا دون ORM. API التخزين تبدو شيئا مثل:

JournalFactory factory = new JournalFactory("/mnt1/data/tick");

MyObject o = new MyObject();
try (JournalWriter<MyObject> writer = factory.writer(MyObject.class)) {

   o.setBlah(...);
   writer.append(o);

   // more appends here
   //
   writer.commit();
}

وحاول ما يلي، فإنه يؤدي بشكل جيد مع السبات والأطر ORM أخرى

http://hsqldb.org/

وأود أن أقدم في محاولة ل OrientDB .

خريطة كرونيكل عبارة عن قاعدة بيانات Java ثابتة قابلة للتضمين، وتوفر قاعدة بيانات بسيطة java.util.Map واجهه المستخدم.يقاوم حوالي 1 مليون دولار الاستعلامات/التحديثات في الثانية الواحدة من خيط واحد, وأداء ثابت للقراءة/الكتابة ويتناسب بشكل خطي تقريبًا مع عدد النوى في الجهاز.

فيما يلي بعض أبحاث الأداء الحديثة بالأرقام الفعلية:

ويمكن أيضا أن يكون

والطين الجواب لكم. وهو يتيح نظام رصد السفن متعددة لتبادل الكائنات بحيث يمكنك توزيع الحمولة الخ ...

ويمكنك أيضا إجراء فحص db4o

بيركلي DB لجاوا هو سريعة في الذاكرة قاعدة بيانات ومفيدة للغاية بالنسبة الرسوم البيانية وجوه بسيطة.

وHSQLDB سريع جدا، ولكن ليس من حمض عملية آمنة. أسرع جافا قاعدة بيانات أعرفها هي db4o: معايير

تحرير : يرجى ملاحظة أن Prevayler يست قاعدة بيانات، انظر> وأ href = "http://www.prevayler.org/wiki.jsp؟topic=PrevaylerIsNotADatabase" يختلط = "نوفولو noreferrer "> http://www.prevayler.org/wiki.jsp؟topic=PrevaylerIsNotADatabase . إذا كنت من ذاكرة الوصول العشوائي، وكنت من الحظ.

وH2 أمر رائع حقا، حقا، في الذاكرة، والخادم العادي والمعاملات، لديك كل شيء. ومع ذلك فإنه لا مقارنة في الأداء لقواعد البيانات وجوه، وأرى ذكر Db4o، لقد كان الأداء أفضل بكثير مع Neodatis في الواقع، وكل شيء وضع جيد حتى في مستودعات مخضرم. وإن لم يكن قويا جدا، مثل فيراري، بسرعة ولكن ليس الشاحنات مثل أوراكل.

ويمكنك محاولة CSQL (متوفر تحت مفتوحة المصدر ونسخة المؤسسة) ويوفر تحسين الأداء 30X على القرص تستند نظم قواعد البيانات ويوفر واجهة JDBC. ويمكن تهيئتها للعمل في قاعدة بيانات الذاكرة الرئيسية قائمة بذاتها أو مخبأ شفافة إلى الخلية، بوستجرس وقواعد البيانات أوراكل.

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