ذكري المظهر:هل من الأفضل استخدام ملف نصي أو ملف XML لتخزين البيانات الثابتة

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

سؤال

لدي بعض البيانات المرجعية في ملف نصي (حوالي 5 ميجابايت) أريد استخدامه مع تطبيق Android.

الملف يكون بالصيغة:

1|a|This is line 1a
1|b|This is line 1b
2|a|This is line 2a
2|b|This is line 2b
2|c|This is line 2c

ما أريد معرفته هو الطريقة الأكثر فعالية (ذاكرة أقل، وسرعة، وحجم، وما إلى ذلك) لاستخدام هذا الملف داخل تطبيقي.

أ.) هل يجب علي حفظ الملف كمورد أولي وفتح الملف بأكمله وقراءته عندما أحتاج إلى سطر معين.

ب.) هل يجب علي تحويل الملف إلى XML واستخدام XPath للاستعلام عن الملف عندما أحتاج إلى البحث عن قيمة

<!--sample XML -->
<data>
  <line number="1">
     <entry name="a">This is line 1 a</entry>
  </line>
</data>

ج.) هل يجب عليّ فقط نسخ الملف بأكمله ولصقه كمصفوفة سلسلة ثابتة في التطبيق واستخدامه.

...أي اقتراحات أخرى هي موضع ترحيب.

[يحرر]سأحتاج أيضًا إلى البحث في هذا الملف والانتقال إلى كلمات رئيسية عشوائية، على سبيل المثال."السطر 1 أ".

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

المحلول

ستستغرق قراءة XML دائمًا وقتًا أطول من قراءة النص البسيط أو ملفات CSV.ما يقدمه لك XML في المقايضة هو طريقة منظمة وموثوقة للغاية لتخزين البيانات واسترجاعها.تعد ملفات XML، كما ترون في الأمثلة أعلاه، أكبر بمقدار 2-3 مرات من البيانات التي تحتوي عليها بالفعل.

إذا كنت متأكدًا من أنك لن تواجه أبدًا حرف "المحدد" في ملفك النصي البسيط، فمن المحتمل أن يعمل ذلك بشكل جيد، فقط من منظور سرعة الملف.

نصائح أخرى

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

سأحتاج أيضًا إلى البحث في هذا الملف

ماذا يعني هذا؟كنت تبحث عن طريق بعض مفاتيح السلسلة؟من خلال بعض التعبير العادي؟من خلال سلسلة استعلام بنمط SQL حيث يتم تفسير أجزاء معينة من السطر على أنها أعداد صحيحة مقابل سلاسل مقابل شيء آخر؟بواسطة سلسلة نمط بحث Google؟

ربما تملي كل واحدة من هذه الإجابات تقنية مختلفة لتخزين هذه المعلومات.

سأحتاج أيضًا إلى...الانتقال إلى الخطوط التعسفية.

لماذا؟كيف يمكنك تحديد "الخطوط التعسفية" التي "تقفز" إليها:مفتاح؟رقم السطر؟تعويض البايت؟نتائج البحث؟شيء آخر؟

وبالطبع هناك أسئلة أخرى مثل:

  • كم مرة يتم تحديث هذه البيانات؟
  • كيف يتم تحديث هذه البيانات:النسخة الجديدة من التطبيق؟تحميل الملف كاملا؟تنزيل الدلتا/الاختلافات؟شيء آخر؟
  • هل البيانات ASCII؟UTF-8؟شيء آخر؟

وما إلى ذلك وهلم جرا.

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

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

ستكون الملفات المسطحة هي الخيار الأخير، ولكنها قد تعمل إذا لم يكن الملف كبيرًا جدًا.

إذا قمت بتعريف الكفاءة على أنها (ذاكرة أقل، سريعة، حجم، وما إلى ذلك)، فسيكون الملف الثابت أو المحدد أسرع في التحميل والحفظ.

ومع ذلك، يستخدم الأشخاص لغة XML لأنهم على استعداد لمقايضة بعض هذه السرعة مقابل مرونة أكبر وسهولة في الاستخدام لـ XML.

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