请教数据存储方案

cnwolfs 2013-11-23 09:27:48
工业串口数据采集,共有十几个传感器,要求每个传感器每秒钟采集数据不低于10组。
串口通讯的每个数据包32字节,可以容纳5组数据+1个时间戳。
完毕后要绘制出综合的波形图,就是十几个传感器的波形绘制在同一个图表中,或者绘制在若干个的图表中,横轴是时间,都是根据需求而定了;也可以根据时间来查某个点的相关数据。因此不同数据之间必须根据时间戳能够识别相互之间的关联关系。

寻求个数据的存储方案,要求能够快速索引,快速查找,时序还原。

大型数据库方案不采纳,原因是若采用大型数据库方案,意味着每个客户端都要装数据库,SQL Express也不采纳。
Access也不采纳,不过Access如果当索引的话可以考虑。
比较想用文件方式存储了,例如二进制、XML等等。麻烦往这方面努力下。
...全文
449 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
荒凉1 2013-12-10
  • 打赏
  • 举报
回复
引用 11 楼 leafmao 的回复:
我们也要做这个,关注下 顺便问下楼主绘制波形是怎么做的,我是直接画格子描点
绘制波形用mschart相当的方便
cnwolfs 2013-12-03
  • 打赏
  • 举报
回复
SQLite不错的,花了一个上午,总算了解了下。 http://blog.csdn.net/happy_sand/article/details/8475766 从这里的评测,注意最后的这段话。 Use 0 sec 739 ms 10万条记录才花0.74s,效率确实很高啊! 在我的理解中,微型数据库,由于单数据库的数据容量较小,涉及到的磁盘IO也较少,因此可以提升速度,若是大型数据库,单个数据文件达到几个G以上,这个时间是不可想象的。
cnwolfs 2013-12-03
  • 打赏
  • 举报
回复
引用 22 楼 qldsrx 的回复:
[quote=引用 18 楼 cnwolfs 的回复:] 这个不考虑的,关键是要花钱买,每个客户端都要买,不划算。
哪个要花钱买?客户端什么都不需要安装的,就买个电脑而已,这你都不愿意?服务器简点用PC机也可以的,Oracle本身可以不花钱得到,要技术支持才必须花钱。[/quote] 我的客户不允许使用任何盗版软件,没办法。
cnwolfs 2013-12-03
  • 打赏
  • 举报
回复
引用 19 楼 leafmao 的回复:
[quote=引用 16 楼 cnwolfs 的回复:] [quote=引用 11 楼 leafmao 的回复:] 我们也要做这个,关注下 顺便问下楼主绘制波形是怎么做的,我是直接画格子描点
可以使用曲线图控件,说实话,控件并无法满足所有的场景,自己画最能实现你的表达,不过功能也最弱。 曲线图首先要有点,然后可以用DrawLines画这些点,速度貌似会快点,双缓冲是必须的哦,不能直接使用画笔绘图,否则会非常慢,而且会闪。 [/quote] 我是自定义了个控件,用Graphic画图的,开的双缓冲 请问下你是使用什么曲线图控件的呀[/quote] DevExpress http://bbs.csdn.net/topics/390621995 你看这个贴,可以双Y轴,或者双X轴,甚至可以多轴,目前版本是13.xxx,比我发帖用的这个貌似会更容易点。 自己绘制的效果怎样?发个图上来看看。我也曾经自己绘制,总感觉不够理想。
qldsrx 2013-12-03
  • 打赏
  • 举报
回复
引用 18 楼 cnwolfs 的回复:
这个不考虑的,关键是要花钱买,每个客户端都要买,不划算。
哪个要花钱买?客户端什么都不需要安装的,就买个电脑而已,这你都不愿意?服务器简点用PC机也可以的,Oracle本身可以不花钱得到,要技术支持才必须花钱。
u012193498 2013-12-03
  • 打赏
  • 举报
回复
let me choose Oracle
zhangyuxia8 2013-12-03
  • 打赏
  • 举报
回复
引用 13 楼 qldsrx 的回复:
用Oracle吧,那个最稳定了,你用Web API开放Oracle的数据接口,那样只要有个服务器即可,所有客户端只要可以上网就能做数据对接,无需安装任何软件。
你QQ多少 找你有急事儿呢
leafmao 2013-12-03
  • 打赏
  • 举报
回复
引用 16 楼 cnwolfs 的回复:
[quote=引用 11 楼 leafmao 的回复:] 我们也要做这个,关注下 顺便问下楼主绘制波形是怎么做的,我是直接画格子描点
可以使用曲线图控件,说实话,控件并无法满足所有的场景,自己画最能实现你的表达,不过功能也最弱。 曲线图首先要有点,然后可以用DrawLines画这些点,速度貌似会快点,双缓冲是必须的哦,不能直接使用画笔绘图,否则会非常慢,而且会闪。 [/quote] 我是自定义了个控件,用Graphic画图的,开的双缓冲 请问下你是使用什么曲线图控件的呀
cnwolfs 2013-12-03
  • 打赏
  • 举报
回复
若是使用SQLite的话,数据结构如何设计比较适合? 我的数据大概是每个传感器每秒一个数据包,涵盖5个4字节浮点数数据(单精度Float)和一个时间戳。 想对每个传感器建立一个表,或者一个SQLite数据库。也就是让每个传感器的数据都独立,相互之间的时序关联就通过时间戳来关联。 如果按照这样的设计,表中要存在数据字段、时间戳字段、主键字段,每个数据字段存放一个数据,但是感觉也不是很理想,因为时间戳和主键两个子段数据有点多余,请问有木有更好的建议?
cnwolfs 2013-12-03
  • 打赏
  • 举报
回复
引用 27 楼 leafmao 的回复:
[quote=引用 23 楼 cnwolfs 的回复:] [quote=引用 19 楼 leafmao 的回复:] [quote=引用 16 楼 cnwolfs 的回复:] [quote=引用 11 楼 leafmao 的回复:] 我们也要做这个,关注下 顺便问下楼主绘制波形是怎么做的,我是直接画格子描点
可以使用曲线图控件,说实话,控件并无法满足所有的场景,自己画最能实现你的表达,不过功能也最弱。 曲线图首先要有点,然后可以用DrawLines画这些点,速度貌似会快点,双缓冲是必须的哦,不能直接使用画笔绘图,否则会非常慢,而且会闪。 [/quote] 我是自定义了个控件,用Graphic画图的,开的双缓冲 请问下你是使用什么曲线图控件的呀[/quote] DevExpress http://bbs.csdn.net/topics/390621995 你看这个贴,可以双Y轴,或者双X轴,甚至可以多轴,目前版本是13.xxx,比我发帖用的这个貌似会更容易点。 自己绘制的效果怎样?发个图上来看看。我也曾经自己绘制,总感觉不够理想。 [/quote] 我自己绘制的图效果类似Windows任务管理器里的那个图,网格的颜色弄成了灰色,线条还是用的亮绿色。由于这会不在通讯,显示不了波形不好截图,截个格子的图看看好了 [/quote] 我是有点想看看你的波形图和X、Y坐标的绘制。
cnwolfs 2013-12-03
  • 打赏
  • 举报
回复
引用 26 楼 qldsrx 的回复:
[quote=引用 25 楼 cnwolfs 的回复:] SQLite不错的,花了一个上午,总算了解了下。 http://blog.csdn.net/happy_sand/article/details/8475766 从这里的评测,注意最后的这段话。 Use 0 sec 739 ms 10万条记录才花0.74s,效率确实很高啊! 在我的理解中,微型数据库,由于单数据库的数据容量较小,涉及到的磁盘IO也较少,因此可以提升速度,若是大型数据库,单个数据文件达到几个G以上,这个时间是不可想象的。
SQLite是内存数据库,虽然离线时存储在文件里面,但是一旦启动数据库,所有文件里的内容都会加载到内存,除非你的数据不会大于你的实际内存,否则你看着办吧。 Oracle没有盗版的说法,Oracle正版可以直接从官方网站下载得到,且不需要任何激活措施就无限制使用,你不了解妄加推断是不好的。[/quote] 我的其他客户有用Oracle的,是无需激活,但是法律条款中并不等于可以无偿商业使用
leafmao 2013-12-03
  • 打赏
  • 举报
回复
引用 23 楼 cnwolfs 的回复:
[quote=引用 19 楼 leafmao 的回复:]
[quote=引用 16 楼 cnwolfs 的回复:]
[quote=引用 11 楼 leafmao 的回复:]
我们也要做这个,关注下
顺便问下楼主绘制波形是怎么做的,我是直接画格子描点


可以使用曲线图控件,说实话,控件并无法满足所有的场景,自己画最能实现你的表达,不过功能也最弱。

曲线图首先要有点,然后可以用DrawLines画这些点,速度貌似会快点,双缓冲是必须的哦,不能直接使用画笔绘图,否则会非常慢,而且会闪。

[/quote]
我是自定义了个控件,用Graphic画图的,开的双缓冲
请问下你是使用什么曲线图控件的呀[/quote]

DevExpress

http://bbs.csdn.net/topics/390621995

你看这个贴,可以双Y轴,或者双X轴,甚至可以多轴,目前版本是13.xxx,比我发帖用的这个貌似会更容易点。

自己绘制的效果怎样?发个图上来看看。我也曾经自己绘制,总感觉不够理想。



[/quote]

我自己绘制的图效果类似Windows任务管理器里的那个图,网格的颜色弄成了灰色,线条还是用的亮绿色。由于这会不在通讯,显示不了波形不好截图,截个格子的图看看好了
qldsrx 2013-12-03
  • 打赏
  • 举报
回复
引用 25 楼 cnwolfs 的回复:
SQLite不错的,花了一个上午,总算了解了下。 http://blog.csdn.net/happy_sand/article/details/8475766 从这里的评测,注意最后的这段话。 Use 0 sec 739 ms 10万条记录才花0.74s,效率确实很高啊! 在我的理解中,微型数据库,由于单数据库的数据容量较小,涉及到的磁盘IO也较少,因此可以提升速度,若是大型数据库,单个数据文件达到几个G以上,这个时间是不可想象的。
SQLite是内存数据库,虽然离线时存储在文件里面,但是一旦启动数据库,所有文件里的内容都会加载到内存,除非你的数据不会大于你的实际内存,否则你看着办吧。 Oracle没有盗版的说法,Oracle正版可以直接从官方网站下载得到,且不需要任何激活措施就无限制使用,你不了解妄加推断是不好的。
cnwolfs 2013-12-02
  • 打赏
  • 举报
回复
引用 13 楼 qldsrx 的回复:
用Oracle吧,那个最稳定了,你用Web API开放Oracle的数据接口,那样只要有个服务器即可,所有客户端只要可以上网就能做数据对接,无需安装任何软件。
这个不考虑的,关键是要花钱买,每个客户端都要买,不划算。
cnwolfs 2013-12-02
  • 打赏
  • 举报
回复
引用 10 楼 emailtome 的回复:
SQLite --> http://sqlite.org/
sqlite好像是个选择 了解下。
cnwolfs 2013-12-02
  • 打赏
  • 举报
回复
引用 11 楼 leafmao 的回复:
我们也要做这个,关注下 顺便问下楼主绘制波形是怎么做的,我是直接画格子描点
可以使用曲线图控件,说实话,控件并无法满足所有的场景,自己画最能实现你的表达,不过功能也最弱。 曲线图首先要有点,然后可以用DrawLines画这些点,速度貌似会快点,双缓冲是必须的哦,不能直接使用画笔绘图,否则会非常慢,而且会闪。
leafmao 2013-12-02
  • 打赏
  • 举报
回复
我们也要做这个,关注下 顺便问下楼主绘制波形是怎么做的,我是直接画格子描点
emailtome 2013-12-02
  • 打赏
  • 举报
回复
SQLite --> http://sqlite.org/
xiajing12345 2013-12-02
  • 打赏
  • 举报
回复
可以用 sqlite
devie 2013-12-02
  • 打赏
  • 举报
回复
这要看你的检索条件了,如果只是根据时间检索,可以采用二进制存储。每隔一段时间,如1分钟,存储一个文件。检索的时候先把文件读入道内存中,然后以时间戳为索引进行查找。关键是读入道内存中的数据格式,可以使用key,value的存储格式
加载更多回复(10)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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