数据存储问题,每一秒都要存储大量数据的情况应该怎么处理??

zhaoxinghan 2005-05-08 07:58:19
最近做一个工控软件,需要每一秒用SQL存储一次当前设备状态,大约一百多条数据。我的方法是设了一Timer,每一秒执行数据存储的线程一次。大概结构是

ADOTable1->Append();
ADOTable1->FieldByName("设备名")->AsString = ....;
ADOTable1->FieldByName("状态")->AsString = .....;
ADOTable1->Post();

下边重复上边的工作。

程序运行倒是没问题,但程序的速度实在太慢,大容量的数据存储几乎耗尽了所有的资源。请教各位有没有什么比较好的处理办法??最好能附上相应的代码。
...全文
438 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
titan_ysl 2005-05-10
  • 打赏
  • 举报
回复
用批量提交,批量提交前cbuilder会自动建立临时的paradox本地表来存储的,这样会快些。
在 ADOTable1 打开前设置
ADOTable1->CursorLocation=clUseClient;
ADOTable1->CursorType=ctStatic;
ADOTable1->LockType=ltBatchOptimistic;

然后写你的数据存储
ADOTable1->Append();
ADOTable1->FieldByName("设备名")->AsString = ....;
ADOTable1->FieldByName("状态")->AsString = .....;
ADOTable1->Post();
....
....
存储多条记录后再批量提交
ADOTable1->UpdateBatch(arAllChapters);

另外不要用 Timer ,程序在处理 Timer 事件时,界面会停止响应的。
最好开两个子线程来轮流写入。
ktcserver 2005-05-10
  • 打赏
  • 举报
回复
用SQL语句加参数的方式直接ExecSQL();也比POST快.
godear 2005-05-10
  • 打赏
  • 举报
回复
我没有写过, 可以给提两点建议, 应分成部分工作, 数据输出处理成分时间段存为文本文件, 数据输入用bcp导入文本, 这样有几点优势, 一是分成两部分工作, 互不干扰, 避免造成数据丢失, 二是用bcp不会写日志操作(你现在的方法,sql会写日志, 这会花去相当的资源)
kangji 2005-05-10
  • 打赏
  • 举报
回复
什么数据库?oracle?SqlServer,写法有点不一样,看看帮助好了,不难的
yangbill 2005-05-09
  • 打赏
  • 举报
回复
同问,我也遇到这样的问题。
zhaoxinghan 2005-05-09
  • 打赏
  • 举报
回复
从来没写过啊,这是第一次。存储过程怎么写阿?
kangji 2005-05-09
  • 打赏
  • 举报
回复
还是用存储过程好,直接交给服务器执行,客户程序的压力小
楼主不会没写过存储过程吧?
勉励前行 2005-05-09
  • 打赏
  • 举报
回复
100記錄/秒 = 24*3600*100= 8.64M 記錄/天,如果每記錄約占50字節,那麼每天就是400M數據左右,一個月下來就12G,這樣的數據量還是太大了點。建議專門用一個服務器來實現這個功能。

數據量的控制是很重要的,這樣大的量,以現有的PC能力,速度不可能快。做工控,往往得設計自己的數據格式,因為會有很多重復的數據,壓縮後數據量是很少的。
gyj_china 2005-05-09
  • 打赏
  • 举报
回复
在OnTimer事件中这么写
Timer1->Enabled = false;
ADOTable1->Append();
ADOTable1->FieldByName("设备名")->AsString = ....;
ADOTable1->FieldByName("状态")->AsString = .....;
ADOTable1->Post();
Timer1->Enabled = true;
我不懂电脑 2005-05-09
  • 打赏
  • 举报
回复
最好把Table关闭后再添加,添加完了就提交数据库然后关闭。
HowUCan 2005-05-09
  • 打赏
  • 举报
回复
建议缓存一下,几秒钟存一次
scfox 2005-05-08
  • 打赏
  • 举报
回复
也可搞批量提交
zhaoxinghan 2005-05-08
  • 打赏
  • 举报
回复
我不是很明白,存储过程如何实现??能给个例子么?
zhaoxinghan 2005-05-08
  • 打赏
  • 举报
回复
我不是很明白,存储过程如何实现??能给个例子么?
h98458 2005-05-08
  • 打赏
  • 举报
回复
可以用存储过程,让服务器来执行

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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