سؤال

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

لأغراض بلدي، وأنا سوف يكون دائما القيام يقرأ على هذه الأقنعة بت (لا يكتب أو التحديثات).

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

المحلول

ويجب عليك بالتأكيد استخدام INT (إذا كنت بحاجة إلى 32 الأعلام) أو BIGINT (64 الأعلام). إذا كنت بحاجة إلى المزيد من الأعلام هل يمكن استخدام BINARY (ولكن ربما يجب عليك كما تسأل نفسك لماذا تحتاج الكثير من الأعلام في التطبيق الخاص بك).

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

إذا كنت بحاجة إلى المزيد من الأعلام ويضطرون إلى استخدام BINARY تخسر دعم أصلي لمشغلي المختصة بالبت والدعم وبالتالي من السهل التحقق من قيم العلم. أنا ربما نقل التحقق من قيم العلم لتطبيق عميل ولكن إذا كنت برمجة مريحة في T-SQL أن خيار كذلك. إذا كنت تستخدم C # لديك BitArray فئة مع العمليات اللازمة وفي جاوة لديك BitSet الطبقة .

نصائح أخرى

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

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

وأنا أتفق عادة مع الجواب @ hainstech من استخدام الحقول قليلا، لأنه يمكنك تسمية صراحة كل حقل بت لتحديد ما ينبغي أن تخزين. ومع ذلك أنا لم أر نهج عملي لفعل مقارنات قناع بت مع حقول بت. مع مشغلي SQL ملقم المختصة بالبت (&، |، الخ ...) فإنه من السهل معرفة ما إذا كان يتم تعيين مجموعة من الأعلام. الكثير من العمل للقيام بذلك مع مشغلي المساواة ضد عدد كبير من حقول بت.

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