征求方案 高手请进

wangzhangyong411 2007-05-14 01:26:49
有一大批数据(数量级在百万条),每条记录约100字节左右,有字符串形式的唯一标识,最多16字节。

每条记录包含一状态字段,有三种状态,未发送,已发送,已确认(已收到)

实现对象管理以上数据,数据要求同时保存在内存和文件中,包含以下功能:

1、 添加,能判断唯一标识不重复,此时状态为未发送

2、 按添加顺序取一条状态为未发送者,取后状态为已发送

3、 按添加顺序取一条状态为已发送者,且最近N毫秒内没被取过

4、 把指定唯一标识的记录状态改为已确认,此时该记录内容可以被释放

5、 从文件中快速重建对象



实现要尽量高效率、低内存占用,中途崩溃对数据影响小。
...全文
469 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzhangyong411 2007-05-16
  • 打赏
  • 举报
回复
中途崩溃对数据影响小 这是主要的要求,

是个接收并分发的东西,而且要求很高,设计的数据都是关于钱的,所以数据不能丢

wangzhangyong411 2007-05-15
  • 打赏
  • 举报
回复
谁能给个完整点的方案~~~


跪求


mymtom 2007-05-15
  • 打赏
  • 举报
回复
唯一的办法难道就只有减少读写的次数吗?
--------------------------------------
这个要求与“中途崩溃对数据影响小。”是矛盾的!
数据库采用的方法是先写日志,然后更新数据,更新数据后,对日志做标记!
如果中途崩溃,用日志恢复!其中具体的技术细节应该都是商业机密!
对楼主的系统来说,楼主的系统并不是非常CRITICAL,所以需要做的是在这两个要求之间取得一个平衡,通常这需要微调!
所以建议做成参数的形式!(比如这个参数可以是累计了多少笔写磁盘)
wangzhangyong411 2007-05-15
  • 打赏
  • 举报
回复
大型数据库用raw IO或direct IO,绕过文件系统直接和驱动层打交道,速度能提高不少

并且还采用了很多cache技术

但是总体而言,数据库的读写速度比普通的文件读写还是慢点

我觉得数据库快是因为他的结构设计


mymtom 2007-05-15
  • 打赏
  • 举报
回复
楼上正解
------
楼主说:
另外,文件内存映射要求数据的大小已知,
-------------------
按楼主的描述数据量,开一个几百兆的文件应该就没有问题了!
如果数据超量超过文件容量,可以再开一个文件,不过简单的方法是丢弃数据!


数据库是最好的选择!
至于内存映射文件,是不得已的办法,
有的数据库就使用这种技术,当然最快的是RAW磁盘!


wangzhangyong411 2007-05-15
  • 打赏
  • 举报
回复
既然老大有信心说这样的话,那他的代码肯定比用数据库快

我相信他的


taodm 2007-05-15
  • 打赏
  • 举报
回复
数据库慢?要达到同样功能,你的代码只会更慢,而且慢得多。
wangzhangyong411 2007-05-15
  • 打赏
  • 举报
回复
老大说不用数据库的俩个理由是,

一 用户装麻烦,

二 数据库太慢,它还要处理其他很多东西 把速度给托下来了

另外,文件内存映射要求数据的大小已知

wangzhangyong411 2007-05-15
  • 打赏
  • 举报
回复
昨天晚上想过文件内存映射,今天想再想想

wangzhangyong411 2007-05-15
  • 打赏
  • 举报
回复
差不多解决了,但是还有一个问题,就是如何解决硬盘瓶颈的问题,

唯一的办法难道就只有减少读写的次数吗?

mymtom 2007-05-14
  • 打赏
  • 举报
回复
用的是Windows吗?
好像可以用内存映射文件实现!
复杂度应该是可是承受的!
Unix也有吧!
mymtom 2007-05-14
  • 打赏
  • 举报
回复
100乘以百万,100MB?
mymtom 2007-05-14
  • 打赏
  • 举报
回复
你的这个东东大概需要多大的文件呀!
WYHJK 2007-05-14
  • 打赏
  • 举报
回复
高手快来呀,急呀\
wangzhangyong411 2007-05-14
  • 打赏
  • 举报
回复
娘的,高手死哪去了


wangzhangyong411 2007-05-14
  • 打赏
  • 举报
回复
2、按添加顺序取一条状态为未发送者,取后状态为已发送
1、添加,能判断唯一标识不重复

这俩点上的冲突比较难解决,如果用链表又要添加顺序排,又要判断唯一标识的问题,如果第一点的问题用遍历一次来判断是否唯一的话,效率太低了

高手们给点思路吧
proxiaobai 2007-05-14
  • 打赏
  • 举报
回复
数据库

33,008

社区成员

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

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