大数据的存储和查询

zuibird 2011-07-01 10:48:34
假设有一个虚拟彩票游戏,对一年中的每个月份选择一个方位(东,南,西,北),做为一个投注(即12个方位),要如何设计存储方式才能快速查询每种投注方式的投注数呢, 我知道一共有4的12次方(16777216)个投注方式,很大的数,不太可能把所有方式防在内存里。 请各位大侠帮看看
...全文
156 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
inlench 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 inlench 的回复:]
引用 5 楼 zuibird 的回复:
楼上可能理解有误, 16M存放什么东西?是投注数么,一个长整型,显然不够,其次怎么把一个具体的投注方式对应到你的16M内存的某个位置?

楼上算法有误!
整型就够了!

算法如下:
int *count = new int[16M];
count[N] 用来统计第N种投注方法
N 为 一个24bit 的数,每两位代表一个月的方位。

明……
[/Quote]

因此,实际上,如果每种投注最大允许为 2的8次方,内存需求是 16M
如果每种投注最大允许为 2的16次方,内存需求是 32M
如果每种投注最大允许为 2的32次方,内存需求是 64M
如果每种投注最大允许为 2的64次方,内存需求是 128M

inlench 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zuibird 的回复:]
楼上可能理解有误, 16M存放什么东西?是投注数么,一个长整型,显然不够,其次怎么把一个具体的投注方式对应到你的16M内存的某个位置?
[/Quote]
楼上算法有误!
整型就够了!

算法如下:
int *count = new int[16M];
count[N] 用来统计第N种投注方法
N 为 一个24bit 的数,每两位代表一个月的方位。

明白了吗?
zuibird 2011-07-01
  • 打赏
  • 举报
回复
"24bit的整数" - -!

能说说你的这个“24bit的整数”怎么对应到内存中的那个投注数么?
inlench 2011-07-01
  • 打赏
  • 举报
回复
这个怎么不能放在内存里!最快的方法就是放在内存里。
4的12次方 = 16 M
每种投注方式用 4 字节的整数记录,也就 只需要 4*16M = 64 M 内存。
Win32位程序, 申请 2G 内存都可以,这点内存算什么!
oo 2011-07-01
  • 打赏
  • 举报
回复
长整型才8个字节 8*16M也才128M啊

对应方式很简单啊:
东,南,西,北 分别对应两个bit的:00,01,10,11
有12个月,就是12个这样的2个bit,拼起来就是一个 24bit的整数啊。
zuibird 2011-07-01
  • 打赏
  • 举报
回复
楼上可能理解有误, 16M存放什么东西?是投注数么,一个长整型,显然不够,其次怎么把一个具体的投注方式对应到你的16M内存的某个位置?
wuddny 2011-07-01
  • 打赏
  • 举报
回复
楼主可以考虑下分布式nosql数据库的存储,比如mongodb 如果文件的话 过多小文件对IO负荷很大。如果存储的数有规律的话,最好压缩一下。
oo 2011-07-01
  • 打赏
  • 举报
回复
4的12次方(16777216)

16M,放到内存里不是可以吗?

win32你可以用2G内存的,16M小case
zuibird 2011-07-01
  • 打赏
  • 举报
回复
这个具体的投注数实时变动, 数据库的效率跟不上。

我在考虑用文件,但不清楚怎样设计每种投注方式与文件的对应关系
leonardo1986 2011-07-01
  • 打赏
  • 举报
回复
数据库
axin36520101688 2011-07-01
  • 打赏
  • 举报
回复
555

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧