بالنسبة LevelDB, كيف يمكن الحصول على أداء عشوائي يكتب نفسه كما ادعى "الرسمية" الأداء التقرير ؟

StackOverflow https://stackoverflow.com/questions/9397244

سؤال

واحد الموقع الرسمي leveldb(http://code.google.com/p/leveldb/) هناك تقرير الأداء.أنا لصق على النحو التالي.

أدناه هو من الرسمية leveldb القياسي

هنا هو تقرير الأداء (مع شرح) من تشغيل شملت db_bench البرنامج.النتائج صاخبة نوعا ما ، ولكن ينبغي أن يكون كافيا للحصول على الملعب الأداء تقدير.

الإعداد

نستخدم قاعدة البيانات مع مليون الإدخالات.كل دخول له 16 بايت مفتاح 100 قيمة البايت.القيم المستخدمة من قبل مؤشر ضغط على حوالي نصف حجمها الأصلي.LevelDB:الإصدار 1.1

وحدة المعالجة المركزية:4 x Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40 GHz

CPUCache:4096 KB

مفاتيح:16 بايت لكل

القيم:100 بايت لكل (50 بايت بعد الضغط)

المشاركة:1000000

الخام الحجم:110.6 MB (المقدرة)

حجم الملف:62.9 MB (المقدرة)

أداء الكتابة

"ملء" معايير إنشاء قاعدة بيانات جديدة ، سواء متتابعة أو ترتيب عشوائي.

إن "fillsync" القياسي تمسح البيانات من نظام التشغيل إلى القرص بعد كل عملية ؛ غيرها من عمليات الكتابة ترك البيانات يجلس في نظام تشغيل المخزن المؤقت ذاكرة التخزين المؤقت إلى حين.في "الكتابة" المعيار لا عشوائية يكتب تحديث المفاتيح الموجودة في قاعدة البيانات.

fillseq :1.765 micros/البروتوكول الاختياري ؛ 62.7 MB/s

fillsync :268.409 micros/البروتوكول الاختياري ؛ 0.4 MB/s (10000 ops)

fillrandom :2.460 micros/البروتوكول الاختياري ؛ 45.0 MB/s

الكتابة :2.380 micros/البروتوكول الاختياري ؛ 46.5 MB/s

كل "op" فوق يتوافق مع كتابة واحدة مفتاح/قيمة الزوج.I. e., عشوائي كتابة المعيار يذهب في حوالي 400,000 يكتب في الثانية.

أدناه هو من leveldb القياسي

فعلت بعض معيارا leveldb ولكن يجب كتابة سرعة 100 مرة أقل من التقرير.

هنا هو بلدي تجربة الإعدادات:

  1. وحدة المعالجة المركزية:Intel Core2 Duo T6670 2.20 GHz
  2. 3.0 GB الذاكرة
  3. 32 بت ويندوز 7
  4. دون ضغط
  5. خيارات.write_buffer_size = 100MB
  6. خيارات.block_cache = 640MB

ما فعلته هو بسيط جدا:أنا فقط وضعت 2 مليون {المفتاح القيمة} أي يقرأ في كل.المفتاح هو صفيف بايت والتي لديها 20 بايت عشوائي و قيمة صفيف بايت أيضا مع 100 بايت عشوائي.أنا وضعت باستمرار حديثا عشوائية {المفتاح القيمة} 2 مليون مرة بدون تنفيذ أي عملية تشغيل آخر.

في تجربتي, أستطيع أن أرى أن سرعة الكتابة يقلل من البداية.لحظة السرعة (قياس سرعة كل 1024 يكتب) يتأرجح بين 50/s إلى 10 ، 000/s.و بلدي عموما متوسط سرعة يكتب عن 2 مليون أزواج حوالي 3000/s.ذروة سرعة يكتب هو 10 ، 000/s.

كما وأشار التقرير إلى أن سرعة يكتب يمكن 400, 000/s ، سرعة الكتابة من المعيار 40 إلى 130 مرات أبطأ وأنا أتساءل ما هو الخطأ في بلدي المعيار.

لا تحتاج إلى لصق بلدي اختبار رموز هنا كما هو السوبر سهلة ، لدي فقط بينما حلقة 2 مليون مرة داخل حلقة كل التكرار ، ط توليد 20 بايت من مفتاح 100 بايت من القيمة ، ومن ثم وضعها على leveldb قاعدة البيانات الخاصة بنا.أنا أيضا قياس الوقت الذي يقضيه في {المفتاح القيمة} جيل يكلف 0 مللي.

أي شخص يمكن أن تساعد لي مع هذا ؟ كيف يمكنني تحقيق 400, 000/s ويكتب السرعة مع leveldb?ما هي الإعدادات يجب أن تحسن ؟

شكرا

وعلاوة على ذلك

جريت الرسمية db_bench.cc على machie.ومن 28 مرات أبطأ من التقرير.

أعتقد كما كان البرنامج الإرشادي ، الفرق الوحيد بين المرجعي و لهم الجهاز.

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

المحلول

لديك 2 مليون أزواج قيمة المفتاح و كل قيمة مفتاح الزوج ما مجموعه 120 بايت, حتى 2 مليون * 120 بايت = 228 ميجا بايت من البيانات!ذاكرة التخزين المؤقت هو 640 MB لذلك فمن الممكن تماما أن جميع البيانات الخاصة بك لا تزال في ذاكرة الوصول العشوائي و هذا لم يحصل حقا إلى القرص.كما Kitsune أشار إلى:الأجهزة الخاصة بك في أي مكان بالقرب بأسرع واحد أن جوجل تختبر مع و إذا كان جوجل نفس حجم ذاكرة التخزين المؤقت ثم أن يمكن بسهولة تنتج 30 مرة الفرق.

القضايا المحتملة الأخرى:

  • من الصعب أن تعرف بالضبط كيف "عشوائية" مفاتيح:LevelDB ينفذ بشكل مختلف اعتمادا على توزيع مفاتيح (حتى لو كانت "عشوائية").
  • 20 بايت مفاتيح سيكون أقل كفاءة من 16 بايت مفاتيح, لأنها لا تتماشى كذلك.
  • اعتمادا على القرص الصلب, القرص سرعة الكتابة قد تكون أبطأ (يمكنك التحقق لك).

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

نصائح أخرى

عند تشغيل نفس المعيار على مختلفة تماما الأجهزة أنت لا بد أن نرى بعض الاختلافات.

  • وحدة المعالجة المركزية الخاصة بك هو ~9x أضعف 2xCores@2.2GHz مقابل 16xCores@2.4GHz
  • القرص الصلب و الأقراص الرسمية المعيار لم تذكر (الألياف ناس vs أقراص الحالة الصلبة SSD vs a hard disk drive HDD)

لا تقارن التفاح بالبرتقال أو التفاح [فاكهة غير معروف].

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