确定是否从一系列数字中看到唯一编号

时间:2015-04-22 17:52:22

标签: algorithm sorting

我正在尝试找到最佳,最快捷,最有效的方法来确定某个范围内是否有某个数字。

示例: 记录密钥:抽奖事件1(数据库密钥)

门票可用:1 - 1000000(范围)

4号门票已经上交。这个活动已经上交了吗?

票号865401已经上交。此活动已经上交了吗?

我已经考虑过位掩码,将数据存储为存储桶等等。但这些似乎都不是我想要找到的答案。也许它不存在。

我们有800,000个活动,每个活动有100万张门票。我们目前正在存储最后一个号码,拒绝任何较低的号码。我们希望有更精细的粒度,但需要效率并存储每张票是不切实际的。

使用SQL

存储数据

有什么想法吗?

修改

我到目前为止提出的最好的想法是使用位图。每个事件有10列。每列存储100,000位。这应该允许快速数据检索,然后只检查该位是打开还是关闭。这应该是每个事件大约1mb的存储空间,或者每列读取100k。

我仍然在寻找其他想法或建议。

2 个答案:

答案 0 :(得分:0)

如果您预计范围适中,则可以使用位掩码。否则你可以尝试使用一组结构。这些可以使用二叉搜索树来实现。

答案 1 :(得分:0)

我选择了位图。如果使用了票证,我会存储1/0。我将此位图拆分为16个存储区。这是我的神奇数字,因为它只有不到8K的桶,这是SQL分页的完美尺寸。

每个存储桶最初都为空,直到需要为止。这节省了空间。这样每个甚至占用零空间。而我们每张“62500”的门票仅使用8K。 (8K)

它是高效的,并且做我需要的一切。我玩压缩以节省空间,但对我来说最糟糕的情况是如果所有票都被计算在内的几万亿条记录总计100GB(每个事件的所有桶)。这可能听起来像是一个很大的空间,但今天的成本几乎可以忽略不计,不值得尝试压缩数据桶。