سؤال

لذلك لدي عدد "كبير" من "كبيرة جدا" ملفات ASCII من البيانات العددية (غيغابايت تماما), و البرنامج سوف تحتاج إلى عملية مجمل ذلك بالتتابع مرة واحدة على الأقل.

أي نصيحة على تخزين/تحميل البيانات ؟ لقد فكرت في تحويل الملفات الثنائية لجعلها أصغر و لسرعة التحميل.

يجب تحميل كل شيء في الذاكرة في كل مرة ؟
إذا كان لا يفتح ما هو وسيلة جيدة من تحميل البيانات بشكل جزئي ؟
ما هي بعض جافا ذات كفاءة نصائح ؟

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

المحلول

إذن ما إذا كانت المعالجة تتطلب القفز حولها في بيانات عدة ملفات متعددة مخازن?هو ثابت فتح وإغلاق الملفات الثنائية سوف تصبح مكلفة ؟

أنا مروحة كبيرة من 'تعيين الذاكرة i/o', المعروف المباشر بايت مخازن'.في جافا يطلق عليها تعيين البايت مخازن هي جزء من جافا.nio.(أساسا, هذه الآلية يستخدم نظام التشغيل ترحيل الذاكرة الظاهرية نظام 'خريطة' ملفاتك وتقديمها برمجيا كما بايت المخازن المؤقتة.نظام التشغيل سوف يتمكنون من تحريك بايت من القرص و الذاكرة سحرية لصناعة السيارات و بسرعة جدا.

أقترح هذا النهج لأن) يعمل بالنسبة لي ، ب) وسوف تتيح لك التركيز على خوارزمية الخاص بك والسماح JVM ، OS والأجهزة التعامل مع الأداء الأمثل.جميع في كثير من الأحيان, أنهم يعرفون ما هو الأفضل أكثر من ذلك من منا المتواضع المبرمجين.;)

كيف يمكنك استخدام بكالوريوس الطب والجراحة في السياق ؟ مجرد إنشاء MBB لكل الملفات الخاصة بك وقراءتها على النحو الذي تراه مناسبا.وسوف تحتاج فقط إلى متجر النتائج الخاصة بك..

راجع للشغل:مقدار البيانات التي تتعامل مع جيجابايت ؟ إذا كان أكثر من 3-4 جيجابايت, ثم هذا لن يعمل على 32 بت آلة كما MBB التنفيذ هو المدعى عليه في عنونة الذاكرة الفضاء من منصة العمارة.جهاز 64-بت & OS سوف يأخذك إلى 1TB أو 128TB من للتعيين البيانات.

إذا كنت تفكر في الأداء ، ثم تعرف كيرك بيبردين (حد الشهيرة جافا أداء المعلم.) وهو يشارك مع موقع على شبكة الانترنت ، www.JavaPerformanceTuning.com التي لديها بعض أكثر MBB التفاصيل: NIO الأداء نصائح وغيرها من جافا الأداء من الأمور ذات الصلة.

نصائح أخرى

قد ترغب في إلقاء نظرة على الإدخالات في واسعة الباحث عن المشروع (القيام جوجل لبحث عن "واسعة الباحث" جافا).

واسعة الباحث ينطوي على القراءة على الكثير من الخطوط في ملفات السجل حتى ننظر في جافا تطبيقات و انظر ما عملت وما لم أعمل هناك.

هل يمكن تحويل الثنائية, ولكن ثم لديك 1+ شيء نسخ من البيانات ، إذا كنت بحاجة إلى الاحتفاظ الأصلي حولها.

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

للإجابة على الأسئلة الخاصة بك في النظام:

يجب تحميل كل شيء في الذاكرة في كل مرة ؟

لا إذا لم يكن لديك إلى.بعض الملفات قد تكون قادرة على ، ولكن إذا كنت مجرد تجهيز بالتتابع, مجرد القيام ببعض نوع من مؤقتا من خلال قراءة الأشياء واحدا تلو الآخر, تخزين كل ما تحتاج على طول الطريق.

إذا كان لا يفتح ما هو وسيلة جيدة من تحميل البيانات بشكل جزئي ؟

BufferedReaders/etc هو أبسط ، على الرغم من أنك يمكن أن ننظر في عمق FileChannel/etc استخدام memorymapped I/O أن تذهب من خلال ويندوز من البيانات في وقت واحد.

ما هي بعض جافا ذات كفاءة نصائح ؟

هذا يعتمد حقا على ما تفعله مع البيانات نفسها!

دون أي نظرة إضافية إلى أي نوع من المعالجة يجري هنا بعض الأفكار العامة عندما كنت قد فعلت بعمل مماثل.

  1. كتابة نموذج الطلب الخاص بك (ربما حتى "واحد لرمي بعيدا") أن ينفذ بعض التعسفي العملية على مجموعة البيانات الخاصة بك.انظر كيف سريع وغني.إذا كان أبسط من السذاجة شيء تفكر فيه هو مقبول سريع, لا تقلق!

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

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

لا "تحميل كل شيء في الذاكرة".فقط نفذ الملف يصل والسماح قرص نظام التشغيل صفحة ذاكرة التخزين المؤقت تقرر عندما تحصل في الواقع سحب الأشياء مباشرة من الذاكرة.

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

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

كنت حقا لم تعطنا معلومات كافية لمساعدتك.لا تحتاج إلى تحميل كل ملف في entiretly في ذلك ؟ أو يمكنك معالجة ذلك الخط من خلال الخط ؟

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

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

أفترض أنك تريد أن تفعل شيئا مع نتائج المعالجة هنا مثل تخزينها في مكان ما.

إذا كان لديك البيانات العددية بانتظام عينات و عليك القيام به الوصول العشوائي تنظر إلى تخزينها في quadtree.

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

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

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

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