高分求数据存取的一个问题

flymood 2010-10-11 06:30:56
有台工控计算机,1G内存,4G的硬盘(闪存卡)。这台机器是用来做实时采集的,有1万多个采集点。现在要把这1万多个点,1秒钟存一下,能够存放最近15天的数据,就是滚存的意思。现在我在犹豫,是用access文件,还是mysql,还是二进制文件实现这个存储功能。由于别的机器可能会召唤这些数据,还有考虑取的效率。

各位兄弟有什么好的建议没?
...全文
116 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
flymood 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yutaooo 的回复:]
晕,我推荐的berkeley db怎么就不考虑呢?这个就是嵌入式数据库,而且是最成熟最好的一个。

虽然名气不响亮,但是,你要知道,早期的mysql就建立在bdb的基础上。直到bdb被oracle收购。

我对工控是比较熟悉的,相信我,一定是不希望用企业级数据库的。免维护是个相当大的需求。
[/Quote]

比较了几种数据库后,发现berkeley db还真是不错。虽然中文资料没有sqlite等多,但是oracle官方的资料还是比较全。谢谢你的推荐。
flymood 2010-10-16
  • 打赏
  • 举报
回复
多谢兄弟。我这几天正在研究berkeley db和sqlite,还有Firebird。以前没用过嵌入式数据库,看了些资料后,发现这些数据库真是好东西。哈哈。
flymood 2010-10-15
  • 打赏
  • 举报
回复
就这样吧。也没是好办法,我研究研究嵌入式数据库。
yutaooo 2010-10-15
  • 打赏
  • 举报
回复

晕,我推荐的berkeley db怎么就不考虑呢?这个就是嵌入式数据库,而且是最成熟最好的一个。

虽然名气不响亮,但是,你要知道,早期的mysql就建立在bdb的基础上。直到bdb被oracle收购。

我对工控是比较熟悉的,相信我,一定是不希望用企业级数据库的。免维护是个相当大的需求。
ayw215 2010-10-12
  • 打赏
  • 举报
回复
这么点内存和硬盘,用啥mysql啊,用SQLite
job82824 2010-10-12
  • 打赏
  • 举报
回复
那就用SQLite吧。硬盘不够用的话可以考虑挂载个usb的硬盘专门用作数据存储。
  • 打赏
  • 举报
回复
我觉得硬盘可能不够。
10000*3600*24*15约有1*10^10的数据,假设每个数据只是一个int型4字节数据,那么你要存的总量为40G。
硬盘够吗,你这种存取,Mysql等数据库肯定没问题,但是硬件倒是问题。
fengbingchun 2010-10-12
  • 打赏
  • 举报
回复
用oracle吧
flymood 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 job82824 的回复:]

你的硬盘也太小了点儿。
40k*3600*15=2G。
15天的数据最紧凑存储也要2G了。还有操作系统的1G文件,外加虚拟文件1G刚好全部占完?你这个系统可能xp跑着会很悬的......要是再装数据库的话还要占空间的。
可以考虑直接二进制文件的--掉电数据不丢失。
干脆再弄一台服务器来好了。让工控机给数据库服务器发包存储,这样不是更好些吗?
[/Quote]

其实这台机器工控机都算不上,因为cpu很弱,是moxa的powerpc,平常就是用来做电力规约解析。就是采集电力设备的数据,规约转换后送向远方的服务器。现在要考虑的是到远方的通讯有可能中断,在中断其间,这些数据要存储在本地,通讯恢复后,再把这些数据再送给远方的服务器,存进历史数据库。

由于不是一般的机器,存储用的不是普通硬盘,就是闪存卡,原来是1G,但是moxa黑啊,换个4G的,竟然要1000多,市场上4G的闪存卡多便宜啊,但是没办法,这是moxa专用的接口,其他卡插上没用。再加机器也是不可能的,这台机器是在标准机柜上装着呢,没空间加其他机器了。

这台机器其实本来跑的是嵌入式linux,但是现场用的都是opc规约,就装了个裁剪过的xp。
job82824 2010-10-12
  • 打赏
  • 举报
回复
你的硬盘也太小了点儿。
40k*3600*15=2G。
15天的数据最紧凑存储也要2G了。还有操作系统的1G文件,外加虚拟文件1G刚好全部占完?你这个系统可能xp跑着会很悬的......要是再装数据库的话还要占空间的。
可以考虑直接二进制文件的--掉电数据不丢失。
干脆再弄一台服务器来好了。让工控机给数据库服务器发包存储,这样不是更好些吗?
job82824 2010-10-12
  • 打赏
  • 举报
回复
10000个浮点型就是39k左右,数据量很小嘛。1秒存一次间隔还是很长的。Access可以用,但肯定不如mysql的好。如果滚动存储的话不妨采用硬盘数据缓存。每次实时采样时都存储在硬盘缓存文件上,等到采样中止或者完成后才录入数据库当中。
如果用Access的话,不要实时写入,那样的话文件指针会越来越大的。就用上面的方式,每隔一定周期写入一次。写入后就压缩。
flymood 2010-10-12
  • 打赏
  • 举报
回复
顶上去,都来看看啊。
flymood 2010-10-11
  • 打赏
  • 举报
回复
多谢楼上几位。
后续还是把存的数据提出来,按数据点和时间传送给远方的程序,远方的程序再存进oracle。这机器上就是简单的存储。不需要分析等其他功能。
Defonds 2010-10-11
  • 打赏
  • 举报
回复
mysql,实用,利于维护,后期数据移植也不错
hmg25 2010-10-11
  • 打赏
  • 举报
回复
二进制文件,后期进一步处理麻烦,建议还是mysql
cattycat 2010-10-11
  • 打赏
  • 举报
回复
access肯定不行,用mysql,数据增大时,可以对表划分区,性能好。
yutaooo 2010-10-11
  • 打赏
  • 举报
回复

这个关键看你还有什么应用需求。后续的统计,分析工作如何展开。如果,只是暂存,将来会转储到企业级数据库,比如DB2,Oracle,SqlServer,MySQL,那么,文件吧。简单实用。

如果,后续应用比较简单,分析功能比较弱,我推荐一下berkeley db。

access,mysql我不推荐。原因是,需要后续维护,要求数据库专业知识。对于工控来说,最好是免维护。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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