تقييم HDF5: ما هي القيود / الميزات التي توفرها HDF5 لبيانات النمذجة؟

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

سؤال

نحن في تقييم التكنولوجيات التي سنستخدمها لتخزين البيانات التي نجتمعها أثناء تحليل رمز C / C ++. في حالة C ++، يمكن أن تكون كمية البيانات كبيرة نسبيا، ~ 20 ميجابايت لكل تو.

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

  1. أداء. سيتم كتابة الاستخدام العام للبيانات مرة واحدة وقراءة "عدة مرات"، على غرار عمر ملف ".o" الذي تم إنشاؤه بواسطة مترجم. كيف يقارن HDF5 مقابل استخدام شيء مثل SQLite DB؟ هل هذا حتى مقارنة معقولة لجعل؟

  2. بمرور الوقت، سنضيف إلى المعلومات التي نقوم بتخزينها، لكن لن ترغب بالضرورة في إعادة توزيع مجموعة جديدة تماما من "القراء" لدعم تنسيق جديد. بعد قراءة دليل المستخدم، أفهم أن HDF5 يشبه XML أو DB، في هذه المعلومات مرتبطة بعلامة / عمود، وبالتالي فإن أداة تم تصميمها لقراءة هيكل أقدم ستجاهل الحقول التي لا تهتم بها؟ هل فهمي على هذا صحيح؟

  3. سيكون جزء كبير من المعلومات التي نود أن نرغب في الكتابة هي نوع من الهيكل: نطاق التسلسل الهرمي، اكتب هرمي وما إلى ذلك. إلى آخر؟ إذا لم يكن الأمر كذلك، هل هناك تقنية قياسية لحل هذه المشكلة باستخدام HDF5؟ أو، كما هو مطلوب في DB، هل نحتاج إلى مفتاح فريد من شأنه "ربط" كائن واحد مع آخر مع البحث المناسب عند البحث عن البيانات؟

تشكرات!

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

المحلول

كيف يقارن HDF5 مقابل استخدام شيء مثل SQLite DB؟ هل هذا حتى مقارنة معقولة لجعل؟

نوع مماابل ولكن ليس حقا. انهم كل من الملفات المهيكلة. يحتوي SQLite على ميزات لدعم استعلامات قاعدة البيانات باستخدام SQL. يحتوي HDF5 على ميزات لدعم مجموعات البيانات العلمية الكبيرة.

كلاهما يعني أن يكون الأداء العالي.

بمرور الوقت، سنضيف إلى المعلومات التي نقوم بتخزينها، لكن لن ترغب بالضرورة في إعادة توزيع مجموعة جديدة تماما من "القراء" لدعم تنسيق جديد.

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

هل من الممكن أن يكون لديك كائن HDF5 واحد "نقطة" إلى أخرى؟

إطلاقا! سوف ترغب في استخدام صفات. وبعد يحتوي كل كائن على سلاسل واحدة أو أكثر التي تصف المسار للوصول إلى هذا الكائن. HDF5. مجموعات متجانسة للمجلدات / الدلائل، باستثناء أن المجلدات / الدلائل هي التسلسل الهرمي = المسار الفريد يصف موقع كل واحد (في أنظمة الملفات W / O الروابط الصلبة على الأقل)، في حين أن المجموعات تشكل رسم بياني موجه يمكن أن يشمل دورات. لست متأكدا مما إذا كنت تستطيع تخزين "مؤشر" كائن مباشرة كاسم، ولكن يمكنك دائما تخزين المسار المطلق / النسبي كسمية سلسلة. (أو أي مكان آخر كسلسلة؛ هل يمكن أن يكون لديك الجداول البحث في المجرة إذا كنت تريد.)

نصائح أخرى

نحن ننتج بيانات HDF5 على مشروعي، لكنني لا أتناول مباشرة معها عادة. يمكنني أن أغتنم طعنة في الأسئلة الأولى:

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

  2. القراء يستخدمون عملائنا قوية عندما نضيف أنواع بيانات جديدة. بعض التغييرات متوقعة، لكننا لا داعي للقلق بشأن كسر الشيء عند إضافة المزيد من حقول البيانات. كتب DBA مؤخرا برنامج بيثون لقراءة بيانات HDF5 وملفات KMZ للتصور في Google Earth. منذ أن كان مشروع اعتاد تعلم بيثون، أقول أنه ليس من الصعب بناء القراء.

في السؤال الثالث، سأقوس المعرفة المتفوقة جيسون.

أود أن أقول HDF5 هو خيار معقول تماما، خاصة إذا كنت مهتما بالفعل به أو تخطط لإنتاج شيء للمجتمع العلمي.

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