CN111062810A - 适用于证券交易系统基于接口多维索引数据的处理方法 - Google Patents
适用于证券交易系统基于接口多维索引数据的处理方法 Download PDFInfo
- Publication number
- CN111062810A CN111062810A CN201911099737.2A CN201911099737A CN111062810A CN 111062810 A CN111062810 A CN 111062810A CN 201911099737 A CN201911099737 A CN 201911099737A CN 111062810 A CN111062810 A CN 111062810A
- Authority
- CN
- China
- Prior art keywords
- index
- linked list
- linked
- pointer
- order
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Development Economics (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Software Systems (AREA)
- Economics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明涉及计算机数据处理技术领域,具体来说是适用于证券交易系统基于接口多维索引数据的处理方法,具体方法如下:S1.建立多维索引数据结构:所述多维索引数据结构包括链表在被链数据结构中的链表索引编号,这个编号将用于在被链接元素中获取该索引的链接元素对象。链表本身保存链表的第一个元素的指针,保存链表的最后一个元素的指针,保存链表当前的元素个数,链表中的每个链接元素都需要包含指向前一个链接元素的指针,后一个链接元素的指针,以及链接元素本身所包含的被链数据值或指针,本发明同现有技术相比,其优点在于:无需先查找订单在索引中的位置,这些信息从订单创建时就保存在订单中。
Description
技术领域
本发明涉及计算机数据处理技术领域,具体来说是一种适用于证券交易系统基于接口多维索引数据的处理方法。
背景技术
证券交易系统中的交易指的是“按产品属性所定义的交易规则撮合“买方、卖方”的订单,交易的过程中我们需要在内存中维护一个订单容器,里面存放着所有未成交的订单,这个容器记作“订单簿”,为了能按特定于具体产品的交易规则,对订单簿中的订单进行最快速度得撮合,我们需要对订单簿中的订单建立索引,在插入每一笔订单(记作NewOrder)时,先用索引查找是否有对手方订单(记作OppOrder)可被撮合,如果无符合条件的对手方订单,则在两个或两个以上的索引中插入NewOrder。当一个订单被成交或取消时,我们需要从所有的索引中删除指定的订单。
传统的索引数据结构只有一个维度,每个索引互不相关,例如按价格的高低顺序索引(记作IdxPS)、按价格高低进行二叉树索引(记作IdxPT)、按开平仓的方向,以平仓优先进行索引(记作IdxBS)、按投资者账户名称进行哈希索引(记作IdxAH)、或者按订单被送入交易系统的时间顺序索引(记作IdxTS)。
为了满足在有订单被成交后快速从订单簿中移除已成交订单的需求,我们需要一种数据结构,能在删除时减少索引次数,提高效率。
现有技术方案是依次在每个索引中删除订单,每次操作之前,都需要先索引到具体被删除订单的索引位置。
现有的订单索引维护方式对性能影响较大,需要对每个索引进行一次查找动作才能够进行删除操作,如果订单同时存在6个不同的索引中,则需要查找6次,非常耗时,增加了交易系统的整体延时,降低了交易系统的吞吐量。
以背景中所列的IdxBS、IdxTS索引为例,我们从中删除订单(记作order)时需要运行下面的方法1、index1=IdxBS.Find(order),方法2、index2=IdxTS.Find(order),方法3、IdxBS.Remove(index1),方法4、IdxTS.Remove(index2)。
方法1用于根据订单中的订单号和开平仓方向,查找这笔订单在IdxBS索引中的位置index1,然后再调用方法3删除index1位置上的订单对象。
方法2用于根据订单中的订单号和时间,查找这笔订单在IdxTS索引中的位置index2,然后再调用方法4删除index2位置上的订单对象。
方法1和方法2是可以通过设计一种利用golang语言的天然特性实现的多维索引结构来避免调用。我们需要把上面删除操作,简化到方法5、IdxBS.RemoveValue(order)和方法6、IdxTS.RemoveValue(order)。
也就是说,IdxBS索引及IdxTS索引能够直接根据order中增加的多维索引信息删除order。
发明内容
本发明的目的在于解决现有技术中存在于多个索引中的订单需要进行多次查找才能删除的问题,提供一种使用golang语言创建的多重索引的方法,能将这种多维索引方法用于证券交易系统中订单的处理,既能减少索引次数,提高效率、交易系统的吞吐量和降低每次交易的耗时。
为了实现上述目的,设计一种适用于证券交易系统基于接口多维索引数据的处理方法,其特征在于通过订单所实现的一个或多个索引切换接口,获得订单在其它索引中的位置,直接将订单从其它索引中删除,具体方法如下:
S1.建立多维索引数据结构:所述多维索引数据结构包括链表在被链数据结构中的链表索引编号,这个编号将用于在被链接元素中获取该索引的链接元素对象,链表本身保存链表的第一个元素的指针,保存链表的最后一个元素的指针,保存链表当前的元素个数;链表中的每个链接元素都需要包含指向前一个链接元素的指针,后一个链接元素的指针,以及链接元素本身所包含的被链数据值或指针,为被链接数据结构建立一个支持链表数据结构的索引切换接口,这个接口含有一个函数,函数接受一个整型的索引编号,根据传入的编号不同,函数返回不同的链接元素指针,每个编号对应的是被链数据结构中存储链接元素的数组的元素下标;
S2.删除订单时,先传入创建这个链表时所记录的多维索引在元素内部的链表索引编号,索引切换接口的函数将返回用于链接这个订单的链接元素对象指针;
S3.调用链表的删除链接元素实现方法,对于S2中返回得到的订单链接元素,将链接元素中的指向前一个链接元素的指针和后一个链接元素的指针所指的元素分别置空,进而再将指向前一个链接元素的指针和后一个链接元素的指针本身置空,这样元素就已经从链表中删除了。
本发明同现有技术相比,其优点在于:
1.无需先查找订单在索引中的位置,这些信息从订单创建时就保存在订单中。
2.现有技术中删除位于多个索引内的订单时,需要依次对每个索引进行一次查找动作,本发明能够进行多维索引,减少了删除时需要进行索引的数量,提高的订单处理的效率,同时将一维的索引改为多维的索引,能够大大降低系统热任务量,降低了处理时间。
3.现有技术中索引只能进行一维索引,即根据价格高低、投资者账户名称等进行索引,本发明能够用于各种索引类型和被索引类型的多重索引。
附图说明
图1是本发明的流程示意图;
图中:1.单个价格档位对象 2.订单优先级链表 3.订单时间链表 4.单个订单对象 5.0号下标元素对象 6.1号下标元素对象 7.环形队列链接数组 8.第一多维索引接口9.第二多维索引接口 10.另一个订单对象。
具体实施方式
下面结合附图对本发明作进一步说明,这种装置的结构和原理对本专业的人来说是非常清楚的。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
1、基于接口的多维索引数据结构实现基础:
新交易系统使用的是Golang编程语言开发。在Golang中,“接口”被写作“interface”。
interface的定义是:
它提供了一种描述对象行为的途径,Golang中一个对象不需要显示声明它要实现哪些接口,或者显示得继承哪些接口。只要对象包含了某些接口定义的方法,这个对象就可以传递到接受那个接口定义的方法上。
实施例:
我们定义两个“接口”类型ReadWriter和Locker;两个对象类型S1和S2;其中S1对象实现的方法列表里恰好有两个方法Lock()和Unlock()与接口Locker定义的接口函数一致。S2对象实现的方法列表里的方法恰好包含接口Locker和接口ReadWriter定义的所有接口函数。那么S1对象的实例s1可以传递给接受Locker接口的函数;S2对象的实例s2不仅可以传递给接受Locker接口的函数,还可以传递给接受ReadWriter接口的函数。
如下面的代码所示:
2、基于“接口”建立多维索引数据结构
这个索引数据结构需要支持的功能:根据某一个索引取得了订单对象的实例后,可以通过订单所实现的一个或多个索引切换接口,获得订单在其它索引中的位置,直接将订单从其它索引中删除。
以链表索引结构为例,我们把链表(记作List);其中的index表示这个链表在被链数据结构中的链表索引编号,first保存链表的第一个元素的指针,last保存链表的最后一个元素的指针,size保存链表当前的元素个数;NewList函数根据index创建新的链表,Add插入新的元素代码如下:
从链表List中删除订单的方法RemoveValue,方法5、IdxBS.RemoveValue(order)和方法6、IdxTS.RemoveValue(order)内部实现如下:
1.调用被删除的order,即RemoveValue的形参value所实现的接口GetListIndex,并传入创建这个链表时所记录的多维索引在元素内部的链表索引编号,GetListIndex将返回用于链接这个order的Element对象指针。
2.调用List链表的删除元素Element的实现,将Element中的element.prev,element.next所指的元素的next’和prev’分别置空,进而再将element.prev,element.next本身置空。这样元素就已经从链表中删除了。
对应的实现代码如下:
上面段落中,链表中的每个链接元素(记作Element)都需要包含指向前一个链接元素的指针,记作prev;后一个链接元素的指针,记作next;以及链接元素本身所包含的被链数据值或指针(记作value,这里的类型定义为通用类型interface{});链接元素的结构如下:
定义一个支持链表数据结构的索引切换接口(记作MultiIndexList)如下,这个接口含有一个函数(记作GetListIndex),函数接受一个整型的索引编号index;根据传入的编号不同,函数返回不同的链接元素指针*Element,每个编号对应的是被链数据结构中存储链接元素的数组的元素下标,将在下一节中阐述:
type MultiIndexList interface{
GetListIndex(index int)*Element
}
在被链数据结构——订单(记作TechOrder)中实现这个索引切换接口MultiIndexList中的方法GetListIndex,如以下代码所示,listNodes是订单数据结构所加入的所有链表的链接元素,它是一个定长数组,保存了2个链接元素,分别用于在两个链表中链入这个订单,另外我们还定义三个枚举值priorityListIndexTO、timeListIndexTO、listIndexMaxTO;priorityListIndexTO是优先级链表的索引编号,取值为0,用于获取两维索引中的第一维索引的Element;timeListIndexTO是时间链表的索引编号,取值为1,用于获取两维索引中的第二维索引的Element;listIndexMaxTO是这个订单数据结构所属的链表索引的个数,用于越界检查:
此专利中所述的订单内存分配方法已经在【上海证券交易所-交易系统升级建设一期项目】中进行了实施,交易系统运行时,我们在程序中的每个价格档位上创建两个链表,分别按订单优先级和时间两个维度进行索引,源代码位于内部代码仓库地址GTS/orderbook.git中,主要逻辑在price_leader.go实现,下面是price_leader.go的部分源代码:
var priorityTechOrders=NewList(priorityListIndexTO)
var timingTechOrders=NewList(timeListIndexTO)
在程序运行时把新订单插入到这两个链中操作如下:
此时订单同时存在于两个索引当中,如图1所示;
当订单被成交完成,从两个链表中删除订单时,不会涉及到查找这笔订单在链中位置的操作,直接调用方法5、IdxBS.RemoveValue(order)和方法6、IdxTS.RemoveValue(order)可以高效得完成删除动作:
Claims (1)
1.一种适用于证券交易系统基于接口多维索引数据的处理方法,其特征在于通过订单所实现的一个或多个索引切换接口,获得订单在其它索引中的位置,直接将订单从其它索引中删除,具体方法如下:
S1.建立多维索引数据结构:所述多维索引数据结构包括链表在被链数据结构中的链表索引编号, 这个编号将用于在被链接元素中获取该索引的链接元素对象,链表本身保存链表的第一个元素的指针,保存链表的最后一个元素的指针,保存链表当前的元素个数;链表中的每个链接元素都需要包含指向前一个链接元素的指针,后一个链接元素的指针,以及链接元素本身所包含的被链数据值或指针,为被链接数据结构建立一个支持链表数据结构的索引切换接口,这个接口含有一个函数,函数接受一个整型的索引编号,根据传入的编号不同,函数返回不同的链接元素指针,每个编号对应的是被链数据结构中存储链接元素的数组的元素下标;
S2.删除订单时,先传入创建这个链表时所记录的多维索引在元素内部的链表索引编号,索引切换接口的函数将返回用于链接这个订单的链接元素对象指针;
S3.调用链表的删除链接元素实现方法,对于S2中返回得到的订单链接元素,将链接元素中的指向前一个链接元素的指针和后一个链接元素的指针所指的元素分别置空,进而再将指向前一个链接元素的指针和后一个链接元素的指针本身置空,这样元素就已经从链表中删除了。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911099737.2A CN111062810A (zh) | 2019-11-12 | 2019-11-12 | 适用于证券交易系统基于接口多维索引数据的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911099737.2A CN111062810A (zh) | 2019-11-12 | 2019-11-12 | 适用于证券交易系统基于接口多维索引数据的处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111062810A true CN111062810A (zh) | 2020-04-24 |
Family
ID=70297868
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911099737.2A Pending CN111062810A (zh) | 2019-11-12 | 2019-11-12 | 适用于证券交易系统基于接口多维索引数据的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111062810A (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090207166A1 (en) * | 2008-02-15 | 2009-08-20 | Song Song | Visualization method and apparatus for multidimensional data |
CN101916262A (zh) * | 2010-07-29 | 2010-12-15 | 北京用友政务软件有限公司 | 一种财政要素匹配的加速方法 |
CN105426408A (zh) * | 2015-11-02 | 2016-03-23 | 北京锐安科技有限公司 | 一种多索引的数据处理方法及装置 |
CN105893635A (zh) * | 2016-06-23 | 2016-08-24 | 河海大学 | 面向发布订阅的网状多级索引匹配方法 |
CN105975587A (zh) * | 2016-05-05 | 2016-09-28 | 诸葛晴凤 | 一种高性能的内存数据库索引组织与访问方法 |
WO2018094777A1 (zh) * | 2016-11-25 | 2018-05-31 | 国云科技股份有限公司 | 一种证券实时交易关联分析的方法 |
CN109885570A (zh) * | 2019-01-30 | 2019-06-14 | 南京邮电大学 | 一种辅助索引结合散列表的多维范围查询方法 |
CN110069221A (zh) * | 2019-04-30 | 2019-07-30 | 北京华三通信技术有限公司 | 数据释放方法及装置 |
-
2019
- 2019-11-12 CN CN201911099737.2A patent/CN111062810A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090207166A1 (en) * | 2008-02-15 | 2009-08-20 | Song Song | Visualization method and apparatus for multidimensional data |
CN101916262A (zh) * | 2010-07-29 | 2010-12-15 | 北京用友政务软件有限公司 | 一种财政要素匹配的加速方法 |
CN105426408A (zh) * | 2015-11-02 | 2016-03-23 | 北京锐安科技有限公司 | 一种多索引的数据处理方法及装置 |
CN105975587A (zh) * | 2016-05-05 | 2016-09-28 | 诸葛晴凤 | 一种高性能的内存数据库索引组织与访问方法 |
CN105893635A (zh) * | 2016-06-23 | 2016-08-24 | 河海大学 | 面向发布订阅的网状多级索引匹配方法 |
WO2018094777A1 (zh) * | 2016-11-25 | 2018-05-31 | 国云科技股份有限公司 | 一种证券实时交易关联分析的方法 |
CN109885570A (zh) * | 2019-01-30 | 2019-06-14 | 南京邮电大学 | 一种辅助索引结合散列表的多维范围查询方法 |
CN110069221A (zh) * | 2019-04-30 | 2019-07-30 | 北京华三通信技术有限公司 | 数据释放方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111339106B (zh) | 一种区块链数据索引的方法 | |
CN104915450B (zh) | 一种基于HBase的大数据存储与检索方法及系统 | |
US7293006B2 (en) | Computer program for storing electronic files and associated attachments in a single searchable database | |
CN101127034B (zh) | 数据组织、查询、呈现、存档、恢复、删除、提炼方法及装置和系统 | |
CN1552032B (zh) | 数据库 | |
EP1217541A1 (en) | Method of processing queries in a database system, and database system and software product for implementing such method | |
EP1211610A1 (en) | Methods of organising data and processing queries in a database system | |
EP1217540A1 (en) | Methods of organizing data and processing queries in a database system, and database system and software product for implementing such method | |
ZA200100187B (en) | Value-instance-connectivity computer-implemented database. | |
WO1998004980A1 (en) | Database apparatus | |
CN1839384A (zh) | 数据集比较与净变化处理 | |
AU2006200226A1 (en) | File system represented inside a database | |
CN103136263A (zh) | 自动生成sql语句的方法 | |
KR101224800B1 (ko) | 정보를 찾기 위해 데이터베이스를 크롤링하는 시스템 및 방법 | |
US6353819B1 (en) | Method and system for using dynamically generated code to perform record management layer functions in a relational database manager | |
CN105373605A (zh) | 数据文件批量存储方法及系统 | |
EP0869444A2 (en) | Integrated database system and computer-readable recording medium recorded with program for managing database structure thereof | |
JPH10260876A (ja) | データベースのデータ構造及びデータベースのデータ処理方法 | |
CN110457398A (zh) | 区块数据存储方法及装置 | |
CN111062810A (zh) | 适用于证券交易系统基于接口多维索引数据的处理方法 | |
US8229946B1 (en) | Business rules application parallel processing system | |
US9830323B2 (en) | Method and system for archiving data from a source database to a target database | |
US11144580B1 (en) | Columnar storage and processing of unstructured data | |
Guo | Toward automated retrieval for a software component repository | |
KR20130047431A (ko) | 대용량 배치처리를 위한 메모리 선적재 및 병렬처리 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |