CountingBloomFilter를 제거할 수 없습니다.
4808 단어 hadoop-bloomfilter
묘사
run test case like this :
@Test
public void testBasics() {
final CountingBloomFilter cbf = new CountingBloomFilter(100, 2,
Hash.MURMUR_HASH);
// ready to add 100 market
for (int i = 0; i < 100; i++) {
Key key = new Key(("abc" + i).getBytes(UTF8));
cbf.add(key);
}
// find and remove
for (int i = 0; i < 100; i++) {
Key key = new Key(("abc" + i).getBytes(UTF8));
assertTrue("key present after insertion", cbf.membershipTest(key));
cbf.delete(key);
assertFalse("key gone after deletion", cbf.membershipTest(key));
}
}
result :
java.lang.AssertionError: key gone after deletion
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertFalse(Assert.java:64)
at org.apache.hadoop.util.bloom.CountingBloomFilterTest.testBasics(CountingBloomFilterTest.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
.Hadoop에서 코드를 추출했습니다.나는 정말 이것이 예기한 행위인지 아닌지 모르겠다.블룸 필터는 본질적으로 확률적이기 때문에 해시는 삭제해야 할 키를 기억할 수 있을 것이라고 추측했다.답변에 감사드립니다. 저는 잘 모르겠습니다. 우선 테스트를 하고 10개의 요소를 추가한 다음에 10개의 요소를 삭제한 다음에 삭제 여부를 테스트합니다. 삭제가 다른 요소에 미치는 영향입니다.@Test
public void testBasics() {
final CountingBloomFilter cbf = new CountingBloomFilter(10, 2,
Hash.MURMUR_HASH);
for (int i = 0; i < 10; i++) {
Key key = new Key(("abc" + i).getBytes(UTF8));
cbf.add(key);
}
String keyStr = null;
for (int i = 0; i < 10; i++) {
keyStr = "abc" + i;
Key key = new Key(keyStr.getBytes(UTF8));
//assertTrue("key present after insertion", cbf.membershipTest(key));
System.out.println("delete before , member ship test key : " + keyStr + " , " + cbf.membershipTest(key));
cbf.delete(key);
//assertFalse("key gone after deletion", cbf.membershipTest(key));
System.out.println("delete after , member ship test key : " + keyStr + " , " + cbf.membershipTest(key));
}
}
결과: +1:삭제하기 전에 구성원 선박 테스트 키: abc0, 참
삭제 후 구성원 선박 테스트 키: abc0, 참
삭제하기 전에 구성원 선박 테스트 키: abc1, 참
삭제 후 구성원 선박 테스트 키: abc1, 참
삭제 전, 구성원 선박 테스트 키: abc2, 정확
삭제 후 구성원 선박 테스트 키: abc2, 정확
삭제 전, 구성원 선박 테스트 키: abc3, 참
삭제 후 구성원 선박 테스트 키: abc3, 오류
삭제 전, 구성원 선박 테스트 키: abc4, 정확
삭제 후 구성원 선박 테스트 키: abc4, 정확
삭제 전, 구성원 선박 테스트 키: abc5, 참
삭제 후 구성원 선박 테스트 키: abc5,false
삭제 전, 구성원 선박 테스트 키: abc6, 정확
삭제 후 구성원 선박 테스트 키: abc6, 오류
삭제 전, 구성원 선박 테스트 키: abc7, 정확
삭제 후 구성원 선박 테스트 키: abc7, 참
삭제 전, 구성원 선박 테스트 키: abc8, 참
삭제 후 구성원 선박 테스트 키: abc8, 오류
삭제 전, 구성원 선박 테스트 키: abc9, 정확
삭제 후 구성원 선박 테스트 키: abc9, 오류
왜 삭제에 추가되었습니까? 추가 값은 여전히 무엇입니까?삭제해도 다른 결과에 오류가 발생합니까?
예컨대
삭제하기 전에 구성원 선박 테스트 키: abc0, 참
삭제 후 구성원 선박 테스트 키: abc0, 참
........
정확한 결과는 이렇습니다. 삭제에 가입하고 다시 가짜를 찾아야 합니다. 가짜는 여기서 진실로 돌아가고 진정한 삭제가 없다고 합니다!
Reference
이 문제에 관하여(CountingBloomFilter를 제거할 수 없습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/francois/hadoop-bloomfilter/issues/1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)