• STSdb,最强纯C#开源NoSQL和虚拟文件系统


    回顾

    几个月前写了一篇文章,关于 C#写的NoSQL开源项目/系统(系列),看过该文章的同学,估计会对.NET能实现高效的NoSQL是有信心的。几个月过去了,有了新进展。

    STSdb是什么

    再来说明一下STSdb是什么:STSdb是C#写的开源嵌入式数据库和虚拟文件系统,支持实时索引,性能是同类产品的几倍到几十倍,访问官方网站

    特性

    • 支持几十亿级别的数据存取
    • 支持TB级别文件大小
    • 并行架构,在服务器上性能爆快
    • 实时索引
    • 内置压缩
    • 内置自动序列化
    • 无数据碎片
    • 快速随机插入
    • 支持任意数据类型
    • 支持稀疏分散的文件(byte[])
    • 纯C#,支持mono

    为什么?

    数据库的共同点

    每个数据库都有一个共同点,就是受限于索引结构,因此每当改进了索引数据结构,性能也随之大增。

    性能瓶颈

    在数据库系统中,每当对数据进行索引,数据的逻辑位置会被映射到物理设备,这个映射严重依赖设备的寻址时间。

    解决办法

    当遇到性能瓶颈时:

    办法就是,不对每个操作都进行一次寻址,而是每次寻址都做多个操作。

    解决方案-WATERFALLTREE™ (瀑布树)

    STSdb 4.0突破性地发现并实现了Waterfall-tree (瀑布树)树结构。Waterfall-tree是注册商标,并且拥有专利。与传统的B+树类似,但B+树是同步操作,而瀑布树是分组异步操作。

    现有的解决方案有一个共同的缺点:当索引随机主键的时候,I/O性能不高(退化严重)。

    而STSdb4.0的瀑布树带了来前所未有的性能提升。

    下图直观地展示了瀑布树的原理:

    性能比较

    数据库存储设计
    Amazon Dynamo DB Zero-Hop Distributed Hash Table
    Cassandra Memtable / SSTable
    Couch DB Append-only B-tree
    Db4objects B-tree
    Google Big Table SSTable (log-structured storage)
    H base Memtable / SSTable on HDFS
    Level DB LSM-tree
    Memcached Memory caching
    Mongo DB B-tree
    Oracle Berkeley DB B+-tree
    Perst B-tree/T-tree/R-tree/Patricia trie/KD-tree
    Redis In-memory only with background snapshots
    Scalaris In-memory only
    Tokyo Cabinet Hash or B-tree

    随机写

    随机读

    顺序写

    顺序读

    这个性能,只能用凶残来形容啊!

    应用领域

    Hello STSdb

    打开数据库并写入数据

    using (StorageEngine engine = new StorageEngine("stsdb4.sys", "stsdb4.dat"))
    {
        XIndex<int, string> table = engine.OpenXIndex<int, string>("table");
     
        for (int i = 0; i < 1000000; i++)
        {
            table[i] = i.ToString();
        }
     
        table.Flush();
        engine.Commit();
    }
    

    读取数据

    using (StorageEngine engine = new StorageEngine("stsdb4.sys", "stsdb4.dat"))
    {
        XIndex<int, string> table = engine.OpenXIndex<int, string>("table");
     
        foreach (var row in table) //table.Forward(), table.Backward()
        {
            Console.WriteLine("{0} {1}", row.Key, row.Value);
        }
    }
    

    更多例子

    可以访问这里查看更多的例子,或者下载类库或代码,里面有pdf文档。

    许可

    尽管STSdb在官网没有说明许可,但从版本的开源项目托管网站来看,许可是GPL 2.0+。

    线程安全

    大家比较关心线程安全,我在这里讲解一下。假设有某XIndex:FooIndex,有2种情况:

    1. 只有一个实例,在多个线程中访问该实例,那么FooIndex线程不安全;

    2. 每个线程都有单独的实例,那么FooIndex线程安全。

    C/S架构

    4.0最终版会带来C/S架构,这样,STSdb不再是单机NoSQL,而是跟MongoDB那样可以通过Java/.NET客户端访问服务器端。

    说明

    虽然我在微博上说明了这个产品不是我写的,我只是在业务系统中使用了这个产品,但一些网友误会了这是国产,更误会我是作者,这个我在这里道歉。

    STSdb的作者是保加利亚的STS Soft SC公司,该公司多年来从事大数据(Big Data)和实时业务的开发,点击这里看公司介绍

  • 相关阅读:
    Entity Framework后台采用分页方式取数据与AspNetPager控件的使用
    Excel Interactive View
    让Visual Studio 2013为你自动生成XML反序列化的类
    如何在C#中生成与PHP一样的MD5 Hash Code
    JavaScript text highlighting JQuery plugin
    JQuery文本框水印插件的简单实现
    Chrome浏览器在Windows8/8.1下显示模糊的解决办法
    Sharing count on Facebook, Twitter, and LinkedIn
    Windows 8.1——将网站固定到开始菜单,自定义图标、颜色和Windows推送通知
    [转]php使用 memcache 来存储 session
  • 原文地址:https://www.cnblogs.com/unruledboy/p/stsdb40.html
Copyright © 2020-2023  润新知