我用VC6.0做了一个可以通过股票卡股票接收及时行情的股票接收系统。以前数据是存储
在.DAT磁盘文件中(如同乾隆、分析家)。
但是为了实现C/S模式,我想把数据存入SQL SERVER 2000数据库中,以便客户机共享
数据。由于每只股票每分钟都能收到好几笔及时行情,加上股票基数较大(1000多),于
是大量数据的存储便成了问题。
由于本人对SQL SERVER不太熟悉,所以有关及时行情的存储想请各位指教一二。
在.DAT磁盘文件中(如同乾隆、分析家)。
但是为了实现C/S模式,我想把数据存入SQL SERVER 2000数据库中,以便客户机共享
数据。由于每只股票每分钟都能收到好几笔及时行情,加上股票基数较大(1000多),于
是大量数据的存储便成了问题。
由于本人对SQL SERVER不太熟悉,所以有关及时行情的存储想请各位指教一二。
解决方案 »
- VC60下有没有支持ACCESS和SQLSERVER的数据持久层服务软件?
- 怎么提取像素中的RGB分量
- 新年快乐
- COleDispatchDriver类怎么继承呢?
- 大虾指点:ADO访问SQL数据库不能连接
- ADO编程: _RecordsetPtr m_pR;这个m_pR有静态和动态的区别吗?
- 怎样可以知道一个文件是否存在
- 怎样提取mp3,rm等格式的文件中的信息?
- 到底应该先看VC++技术内姆还是先看MFC深入浅出?
- 请问:"0xe81314ee"指令引用的"0xe81314ee"内存。该内存不能为"read"是什么原因啊?该怎么做呢?
- 在ATL编写的COM中,方法参数想要传BYTE数组,输入输出都有,用安全数组可行吗?!
- 哪里可以禁止win2000自动共享c$ ???
我也听说用存储过程,但由于(我是SQL新手),不知具体怎样用。
可不可以麻烦你多指点一二。
钟)都存到这个表中,在收盘后转储到硬盘上,不知效率如何?另外:用SQL SERVER在内存中建立用于及时响应的实时数据库(如股票,工控等)
什么方法最好呢?
就是这样的。(但它是dbf库)
就算是建立行情服务器,但如果开辟内存池(可能比较大)用于存储分时行情也比
直接写硬盘,效率应该会高些吧?
问题是;我可不可用SQL SERVER数据库的形式建立内存表呢?
现在有1500多只股票(沪深A,沪深B,基金,转配,增发),按着每天有1400只开盘,每分钟3笔成交,每天240分钟是1008000条记录,如果算上每只股票的买卖手明细,记录起码是这个基数的3倍以上,也就是说一天就有400万条记录插入这张表,你打算存几天的数据?一年是250个交易日,就是10亿条记录,你的数据库能行吗?即使能行,查询,删除会慢死你!我已经试过了,这个方案早就否决了!
日线表存储以日期为索引的日k线数据,大约1500张表。每天收盘时从行情表中
转储过来。
行情表以股票代码为索引,只需一张(或n张 -- 用于将深、沪、基金等分开
存),存储当天的行情列表(Field: 开、收、高、低、量....)。
明细表一张,就用来存收到的分笔成交,用于分时线显示。(Field: 交易时
间、成交价、现手....)。这张表就非常大,每天大约有1M条吧。可考虑只存10
天左右,应该可满足用户需要。
SQL SERVER数据库不知能否胜任?
望各位高手给点指引。
具体格式如下:起止地址 | 数据含义 | 数据类型
-------------------------------
00 - 03 | 日线类型 | Integer
04 - 07 | 证券总数 | Integer
08 - 0B | 空块始址 | Integer
0C - 0F | 空块末址 | Integer
10 - 13 | -保留- | Integer
14 - 17 | -保留- | Integer 18 - 21 | 证券代码 | CHAR[10]
22 - 23 | 日线天数 | Integer
24 - 25 | -保留- | Integer
26 - 57 | 记录块号 | Word[n]
.
.
空闲块
.
.
41000 - 41003 | -日期- | Integer
41004 - 41007 | 开盘价 | Single
41008 - 4100B | 最高价 | Single
4100C - 4100F | 最低价 | Single
41010 - 41013 | 收盘价 | Single
41014 - 41017 | 成交量 | Single
41018 - 4101B | 成交金额 | Single
4101C - 4101D | 上涨家数 | Word
4101E - 4101F | 下跌家数 | Word 注:
1)历史数据以年为单位建立。(如 sh/2000.dat sz/2002.dat)
2)从18h开始每64Byte为一条股票数据分配记录。(如 上表18h - 57h)
3)从41000h开始每8KB为一股票数据存储块,每个股票数据存储块可存储256条日
线记录,每一条记录的长度为32Byte(如上表41000h - 4101Fh)
4)明细表大同小异。
5)该数据格式参照了分析家,因为我用过的所有证券软件中感觉它的数据存储性能
最好。 但是我想把此系统做成C/S模式或B/S模式,为了数据共享需要用数据库存储,
磁盘文件就难以达到此要求。
但本人对SQL SERVER数据库技术不太熟悉。所以在此抛砖引玉,望各位高手都
能谈谈证券类软件基于数据库的存储方法。
-------------------------------------------------
CREATE PROCEDURE [update_行情表]
(@代码_1 [char](8),
@最高_5 [real],
@最低_6 [real],
@最新_7 [real],
@总手_8 [real],
@总额_9 [real])AS
UPDATE [实时数据库].[dbo].[行情表]
SET [最高] = @最高_5,
[最低] = @最低_6,
[最新] = @最新_7,
[总手] = @总手_8,
[总额] = @总额_9
WHERE [代码] = @代码_1
GO
--------------------------------------------------
注:行情表以[代码]为主键。大约有1500多条记录。虽然看起来很简单,但此过程每秒被调用50次之多。于是CPU时间占有高居不下。严重影响了系统的运行。请问各位高手,有没有好的办法解决此问题。
(想法:能不能把该数据表做到内存中,只在内存中更新。但也要能像普遍表一样能被ODBC正常访问?)
效率问题比较好解决,在内存或硬盘开辟临时空间来存储数据,并在系统不忙时将临时数据导入数据库即可。(在处理过程中可能要使用多线程技术)
存储问题比较麻烦了。比较实际的办法是先分析一下确定一下数据规模,如果数据量太大的话,就要重新选择数据库平台。毕竟MS SQL处理这种数据不是强项。
在重新选择数据库平台后,你可将主要精力放在数据进入系统上,将查询、维护尽量交给数据库引擎去作,比如使用触发器或存储进程等。
事实上,内存表是ACCESS格式和操作方法(MSDN里有)
内存表可以做得很大,树立速度也比较快,还可以定时保存。
股票信息实在是小意思啦,比起网络游戏来说。不是每秒钟上千笔吧?
内存表是ACCESS格式和操作方法(MSDN里有),我具体用什么方法来构建和操作内存表呢?我在msdn里没找到,给个书签也好。
网络游戏是用的内存表吗?