سؤال

في تطبيقي، أحتاج إلى تخزين ونقل البيانات التي تحتوي على العديد من قيم السلسلة المتكررة (فكر في أسماء الكيانات في مستند XML).لدي حلان مقترحان:

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

أيهما من المرجح أن يؤدي أداءً أفضل من حيث السرعة وحجم البيانات؟(من الواضح أن هذا يعتمد على جودة التطبيقات، ولكن افترض أن الخيار A يبني مصفوفة من السلاسل ديناميكيًا ويشفر نص الوثيقة بطريقة معقولة).

أيضًا، إذا كان الخيار ب، فهل توصي باستخدام طريقة ضغط أكثر ملاءمة بخلاف gzip؟

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

المحلول

يعد gzip خوارزمية جيدة فقط عندما لا تكون تكلفة النقل/التخزين مرتفعة جدًا مقارنة بتكلفة وقت وحدة المعالجة المركزية.يمكنك الحصول على نسب ضغط أفضل باستخدام bzip2، و7zip، وخاصةً للغة الطبيعية، ومختلف جزء في المليون خوارزميات.

بالطبع، لا يتعلق الأمر بالحساب فقط (والثابت مقابل العمليات الحسابية).متطلبات الذاكرة الديناميكية) مقابل.نسبة الضغط المهمة - تسمح تنسيقات الضغط المختلفة بدرجات متفاوتة من البحث عن الوصول العشوائي الفعال، وفك تشفير التدفق المنخفض، وتسلسل البيانات المضغوطة (على سبيل المثال. cat a.gz b.gz | gunzip -c بالضبط مثل gunzip -c a.gz;gunzip -c b.gz

نصائح أخرى

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

سيعتمد الأمر على الكثير من الأشياء التي لم يتم تناولها في رسالتك.

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

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