与优惠券索赔逻辑相关的数据结构

时间:2012-04-15 04:21:46

标签: algorithm data-structures

假设我们正在为客户生成优惠券 - 每张优惠券都有ID和有效期,我们想设计一个程序,让客户可以领取优惠券。特别是我们不打算使用任何支持数据库,但需要具有可扩展性来处理数百万张优惠券 - 关键逻辑应该可以阻止优惠券获得两次声明

主要是我试图理解最好的数据结构来维持coupoun的状态,即它是否已经声明 - 我知道有像bitmap,hashmap,b-tree这样的选项 - 我想知道哪个会是最佳

3 个答案:

答案 0 :(得分:1)

没有存储机制就不可能做这样的事情。 您需要一种验证优惠券代码的算法。使用后,您需要在数据库中为该优惠券代码设置一个标志,这样任何人都不能使用相同的优惠券两次。

所以表格结构如下:

表格优惠

COUPONCODE:nvarchar(80)
ISUSED:位
EXPIRYDATE:datetime

答案 1 :(得分:0)

你可以维护两个文件吗?在第一个文件中,创建所有将在每天到期的优惠券ID的倒排索引。 所以你会有这样的东西{mm / dd / yyyy:[将在mm / dd / yyyy上过期的产品] ......}(所以这就像键/值对,其中value是一个列表.. 第二个是字典,你可以在其中使用coupon_id作为键,并使用boolean作为值来表示你是否出售优惠券。

并且您每天根据第一张地图的触发响应更新您的第二个哈希地图。 这样的事情......

hashmap 1 :{ Today_date:[1234,2345,42234]....tomorrows date:[43225,2508502..]}

因此,这表明哪些优惠券将在今天和明天到期......等等

hashamp 2:{ 1234:1, 2345:0....}

1可能意味着优惠券已售出..

但在今天的日期过后...... 您返回产品[1234,2345,42234 ...],因为这些是设置为过期的优惠券..并且在hashmap2中:将具有“0”作为其值的优惠券的值设置为-1或者其他东西。含义它们不再可用.. 所以在hashmap 2中只有具有0值的优惠券ID可用.. ??

答案 2 :(得分:0)

我正在考虑这样的事情 - 生成优惠券ID,例如(发行日期+到期日期+运行计数器(每个问题/到期日期对的单独系列1 ... N)+校验和)然后有一些东西像HashMap(ExpiryDate => HashMap(IssueDate,BTree))... Btree将存储与已声明的优惠券相对应的声明的计数器

在我的方法中,我们所做的是生成优惠券ID,以便在优惠券ID中,我编码优惠券发行日期和优惠券到期日期以及增量计数器值 - 1,2 .... N ,防爆。优惠券20120401-20120410-12345-XYZ,然后我只维护BTree中每个发行日期/到期日对的索赔计数器...此Btree而不是每个计数器的1个号码将存储一个范围反价值声称。每个发行/到期日对将有1个Btree。

但是这个Btree将每个节点都作为(N1,N2),其中所有数字都在N1< = N2之间被声明,如果它不与任何现有节点相连,我们将btree插入到btree中,否则将其合并到现有节点,如果它是连续的并更新N1或N2