最初的任务可以这样描述:我需要删除庞大的列表(可能有数十亿个项目),而不存储原始项目--这简直是负担不起的
我只需要知道一个问题的答案:“我的系统以前见过这个元素吗?”
到目前为止,我所能找到的最接近的数据结构是一个布卢姆过滤器,但是它有假阳性,这在我的任务中最好避免,因为它会导致数据丢失。
例如,提供i帐户来存储至少2^32项,并且肯定错误率仅为1% (这意味着我需要至少访问所有urls的1%)。
n = 4,294,967,296, p = 0.01 (1 in 100) → m = 41,167,512,262 (4.79GB), k = 7
4.79GB内存..。
任务本身是一个高规模
我们有一个大约有40k行的表,二级索引的查询速度很慢(生产时需要30秒)。我们的cassandra是1.2.8。表模式如下:
CREATE TABLE usertask (
tid uuid PRIMARY KEY,
content text,
ts int
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds