開源分析數據庫收集

Discussion in 'General Topics on Software and Data' started by konit, Nov 7, 2010.

  1. 搞土炮平臺的前期,分析歷史報價數據,做策略開發,這和商業智能、數據挖掘場景中的數據倉庫比較類似。面向金融分析的需求特點是:海量time-series數據,上百上千只個股日內歷史數據;字段值長度類型固定,不出OHLCV;查詢操作多于寫入操作,查詢速度要求先于寫入速度,并行處理需求有限,后期live上線運行才需要實時并行讀取與追加寫入;桌面單機布署優先于分布式布署,復雜計算的暫不考慮吶。

    商業上滿足這些需求的數據庫,比較知名的就是Sybase IQ和Kdb+了。他們的一個共同點就是使用了面向列(column-oriented)結構來儲存數據,可以明顯提高查詢速度。以此為線索,偶搜索了相關的開源列儲存數據庫項目,通過了解ET上老外對各類數據庫的評價,整理如下(全部支持Windows):

    SQL
    支持SQL語法的數據庫優先考慮,學習曲線低,應用實現廣泛,易于移植維護。

    MySQL、PostgreSQL
    成熟度高,解決方案完善,易于布署。在豐富的文檔資源支持下,任何問題都能搜索到相關的優化方法。傍上這棵大樹不用擔心投資失去價值。缺點是查詢速度慢,需要通過硬件升級來優化。
    http://www.mysql.com
    http://www.postgresql.org

    Infobright、InfiniDB
    這是兩個基于MySQL后端的列式數據庫。專門面向商業智能分析領域,都有商業版和社區版。Infobright社區版有CPU、并發限制,只能查詢,LOAD DATA INFILE操作,不能DML追加寫入操作;InfiniDB沒有限制,查詢速度上高于前者,數據壓縮比低于前者,硬件配置有一定要求,影響力稍低。
    http://www.infobright.org
    http://infinidb.org
    http://tech.it168.com/a2008/1024/209/000000209206_1.shtml
    http://www.webarchs.net/others/10067/
    http://www.mysqlsystems.com/2010/06/opensourcedatawarehouse_infobright.html
    http://www.mysqlperformanceblog.com/2010/01/07/star-schema-bechmark-infobright-infinidb-and-luciddb/
    http://old.nabble.com/-CPyUG--求助,海量日志文件分析-td28218497.html

    SQLite、Berkeley DB
    SQLite一直是嵌入式數據庫的代表,開發接口友好,但數據庫級獨占鎖定是其并發局限,海量數據會使其性能下降,可做日線以上低數據量分析的選擇。
    http://www.sqlite.org

    Berkeley DB是工業強度的嵌入式數據庫,其海量數據處理及并行性能出色,在大量程序中得到應用,MySQL也曾用其做后端引擎。Berkeley DB原本一直只提供鍵值操作,在Oracle接手后,加入了SQL支持,官方說接口和SQLite完全一致,可做替代。需注意其雙license授權模式,個人使用免費,商業使用或商業性分發,則需要開源或者購買商業授權。
    http://www.jroller.com/mrettig/entry/time_series_database_with_berkeley
    http://www.oracle.com/technology/global/cn/products/berkeley-db/index.html
    http://www.bdbchina.com/2010/09/oracle-berkeley-db-产品家族介绍/
    http://www.bdbchina.com/2010/03/oracle-berkeley-db-支持sql啦!/
    http://www.bdbchina.com/2010/03/更多关于oracle-berkeley-db-sql的报道/
    http://www.bdbchina.com/2009/11/berkeley-db三大产品收费模式/


    NoSQL
    速度和分布式是這類數據庫的特點。支持鍵值不支持SQL是弱項。

    HDF5
    HDF5格式主要面向GIS或科學數據儲存,NCSA開發,支持高速并行處理海量數據、超大文件。Matlab有其應用。其內部儲存結構非常類似于*NIX的目錄樹。不支持SQL。須用使用底層開發接口,或High Level APIs進行業務操作。適合于tick數據儲存場景。
    http://www.hdfgroup.org
    http://www.pytables.org/moin
    http://hdf5serie.berlios.de
    http://www.puppetmastertrading.com/blog/2009/01/04/managing-tick-data-with-hdf5/
    http://www.puppetmastertrading.com/blog/2009/01/06/tick-data-hdf5-part-2/

    Tokyo Cabinet/Kyoto Cabinet
    日本人寫的Tokyo Cabinet在多項測評中速度已經超過Berkeley DB。其設計初衷是為了支撐SNS網站,在并發性和大數據量吞吐都經受住了考驗。只支持鍵值操作。Tokyo Cabinet是用C開發的,已經成熟。作者為了便于維護和移植,改用C++開發,易名為Kyoto Cabinet。新版比起舊版,在單線程性能降低,但在高并行性能提高了。并增加了適合多種不同場景的索引參數。
    http://fallabs.com
    http://yinhm.appspot.com/2010/05/no...ngodb-vs-redis-for-time-series-data-benchmark
    http://yinhm.appspot.com/2010/05/tokyo-cabinet-hidden-features-for-time-series-data

    MongoDB
    不少老外青睞MongoDB,有商業公司支持,項目成熟完善。海量數據處理和并發性能比較出色。最受歡迎的是其強大的非SQL查詢語言。但因為是面向文檔的數據庫,偶覺得不是最適合于偶們的應用場景。
    http://www.mongodb.org
    http://www.wentrue.net/blog/?p=772
    http://www.cnblogs.com/Seapeak/archive/2010/06/28/1767091.html
    http://blog.zhaojie.me/2010/02/mongodb-tokyo-tyrant-benchmark-1-basic-cru-operations.html
    http://blog.zhaojie.me/2010/02/mongodb-tokyo-tyrant-benchmark-2-concurrent-insert.html

    還有一些開源數據庫項目,雖然在查詢速度個別指標上占優,但受其它條件約束:JAVA開發、項目活躍度、只支持*NIX、面向分布式環境、沒有商業后續支持等等,就排除掉不予考慮了。看官若有更好的推薦,或不同意見,歡迎跟帖。

    參考資料:
    http://sebug.net/paper/databases/nosql/Nosql.html
     
  2. Berkeley DB 的SQL接口支持网络应用吗?SQLite只支持本地应用(不支持网络应用)。
     
  3. 从安全角度出发,一般情况数据库不直接开放网络访问功能,避免黑客攻击。
    而是通过在服务器端对外提供数据访问服务的程序。
     
  4. 没有,他們目標都是嵌入式數據庫,不能做得太大,不支持C/S結構的。需要自己組合配置。
    日本人那兩個,倒都是特別提供了Server,但不支持SQL。
     
  5. 近期的收獲是找到一個叫「R-Tree」的東東,據說是高維數據快速檢索算法,GIS空間地理信息用得比較多。感覺對時間序列數據也是適用的。各大數據庫都有實現,但偶不確定此算法占用的資源及效率如何。

    http://en.wikipedia.org/wiki/R-tree
    http://blog.csdn.net/chenyq2008/archive/2008/03/02/2140477.aspx
    http://www.rtreeportal.org/
    http://gist.cs.berkeley.edu/
    MySQL(有提到股票數據的應用)
    http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html
    http://dev.mysql.com/doc/refman/5.1/en/optimizing-spatial-analysis.html
    http://forums.mysql.com/read.php?20,42111,42111#msg-42111
    Developing Time-Oriented Database Applications in SQL(EBOOK)
    http://www.cs.arizona.edu/people/rts/publications.html
    PostgreSQL
    http://www.pgsqldb.org/pgsqldoc-8.1c/xindex.html
    Berkeley DB
    http://www.bdbchina.com/2010/04/bdb11gr2的r-tree功能/
    Sqllite
    http://www.sqlite.org/rtree.html
    HDF5
    http://vis.lbl.gov/Events/SC05/HDF5FastQuery/index.html
     
  6. 以前做过DB2/Oracle/SolidDB/Timesten的新能比较,当时真没发现内存数据库比传统数据库真快10倍,也许是内存数据库真的对硬件和内存要求比较高。
     
  7. SAS就可以了,数据获取,策略构建,下单API,全搞定了。SAS数据库与策略分析是一体的。