Имаме интересно предизвикателство. Трябва да контролираме достъпа до данни, които се намират в "кошчета". Потенциално ще има стотици хиляди „кошчета“. Достъпът до всеки контейнер се контролира индивидуално, но ограниченията могат и вероятно ще се припокриват. Мислим да присвоим на всеки контейнер позиция в битова маска (1,2,3,4 и т.н.).
След това, когато потребител влезе в системата, ние преглеждаме неговите атрибути за сигурност и определяме кои контейнери му е позволено да вижда. С тази информация изграждаме битова маска за този потребител, където "настроените" битове съответстват на идентификатора на кошчетата, които му е позволено да вижда. Така че, ако може да види контейнери 1, 3 и 4, битовата му маска ще бъде 1101.
Така че, когато потребител търси в данните, можем да погледнем индекса на bin на върнатия ред и да видим дали този бит е зададен на неговата битова маска. Ако битовата му маска има този бит, ние му позволяваме да види този ред. Планираме битовата маска да се съхранява като BigInteger
в Java.
Въпросът ми е: Ако приемем, че числото на индекса не стане по-голямо от Integer.MAX_INT, битова маска BigInteger
ще се мащабира ли за стотици хиляди битови позиции? Ще отнеме ли цяла вечност да се изпълнява BigInteger.isBitSet(n)
, където n може да е огромно (напр. 874 837)? Ще отнеме ли цяла вечност създаването на такова BigInteger
?
И второ: ако имате алтернативен подход, ще се радвам да го чуя.
BitSet
... Най-големият проблем сBitSet
(мисля) е, че има малко или никакви методи за конвертиране към/отBitSet
, следователно не се използва толкова много - нула пъти в Java API последния път, когато погледна. - person Maarten Bodewes   schedule 19.09.2012BitSet
от байтов масив. - person finnw   schedule 19.09.2012EnumSet
от флагове (битове) вBitSet
иBigInteger
. Може би най-накрая трябва да споделя и това. - person Maarten Bodewes   schedule 20.09.2012