우리에게는 흥미로운 도전이 있습니다. "bins"에있는 데이터에 대한 액세스를 제어해야합니다. 잠재적으로 수십만 개의 "쓰레기통"이있을 것입니다. 각 저장소에 대한 액세스는 개별적으로 제어되지만 제한 사항은 겹칠 수 있으며 중복 될 수 있습니다. 우리는 각 bin을 비트 마스크 (1,2,3,4 등)에 위치 시키려고합니다.거대한 비트 마스크에 Java BigInteger를 사용했을 때 성능에 미치는 영향
사용자가 시스템에 로그인하면 그의 보안 속성을보고 그가 볼 수있는 저장소를 결정합니다. 이 정보를 가지고 우리는이 사용자를 위해 비트 마스크를 구성합니다. "설정"비트는 그가 볼 수있는 빈의 식별자에 해당합니다. 그래서 1, 3, 4 칸을 볼 수 있다면 비트 마스크는 1101이 될 것입니다.
그래서 사용자가 데이터를 검색하면 반환 된 행의 bin 인덱스를보고 해당 비트가 설정되어 있는지 확인할 수 있습니다 그의 비트 마스크. 그의 비트 마스크에 비트가 설정되어 있다면 그 행을 볼 수있게합니다. 우리는 비트 마스크가 Java에서 BigInteger
으로 저장되도록 계획하고 있습니다.
제 질문은 : 색인 번호가 Integer.MAX_INT보다 커지지 않는다고 가정하면 수십만 비트 위치에 대해 BigInteger
비트 마스크가 확장됩니까? BigInteger.isBitSet(n)
을 실행하는 데 영원히 걸릴 수 있습니다. 여기서 n은 큰 수 있습니다 (예 : 874,837)? 그런 BigInteger
을 만드는 데 영원히 걸릴까요?
둘째로 : 대체 접근법이 있다면 나는 그것을 듣고 싶습니다.
[BitSet] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html)? –
아마도 다른 해결책일까요? 이미 솔루션이 확장되지 않는다고 말하고 있습니다. 거대한 메모리 비트 맵 + (잘하면) 많은 사용자 = 나쁜 아이디어. – Augusto
@Banthar 결국'BitSet'에 대한 사용 ...'BitSet'에서 가장 큰 문제는 (내가 생각하기에)'BitSet'에서 /로 변환하는 메소드가 거의 없기 때문에 사용되지 않습니다 지난 번 Java API에서 보았습니다. –