回顾

几个月前写了一篇文章,关于 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)和实时业务的开发,点击这里看公司介绍。

STSdb,最强纯C#开源NoSQL和虚拟文件系统相关推荐

  1. 几种开源NOSQL数据库

    几种开源NOSQL数据库 2017年06月30日 23:36:13 lm_y 阅读数 13655更多 分类专栏: java 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载 ...

  2. 开源NoSQL数据库介绍

    目录 一.概述 二.NoSQL数据库 1. MongoDB 2. Cassandra 3. CouchDB 4. Hypertable 5. Redis 6. Riak 7. Neo4j 8. Had ...

  3. 开源NoSQL数据库ArangoDB浅析

    参考文章:开源NoSQL数据库ArangoDB浅析 https://www.arangodb.com/2017/02/arangoexport-tool-exporting-data-arangodb ...

  4. 二维码检测哪家强?五大开源库测评比较

    作者 | 周强 来源 | 我爱计算机视觉(ID:aicvml) 二维码已经进入人们的日常生活中,尤其是日本Denso Wave公司1994年发明的QR码,由于其易于检测.写入信息量大.提供强大的纠错机 ...

  5. 盘点11个面向文档的开源NoSQL数据库

    MongoDB是一个介于关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型. ...

  6. 第一次接触 SharpHsql(纯C#开源数据库引擎)

    在 开源中的灵感之源 的blog上看到这篇文章 开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本 这篇文章,着实幸福了一阵.       类似的数据库引擎我用过不少,比如 sqlit ...

  7. drive数据集_英伟达的最强人脸GAN开源了,它吃的高清数据集也开源了

    栗子 假装发自 凹非寺 量子位 出品 | 公众号 QbitAI 你大概还没忘记,英伟达去年年底推出的GAN,它合成的人脸甚至骗得过肉眼. 如今,它终于有了自己的名字,叫StyleGAN.顾名思义,GA ...

  8. 本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github

    一.关于NoSQL的项目需求 这些年在做AgileEAS.NET SOA 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢 ...

  9. 又发现一款纯js开源电子表格Luckysheet

    据官网介绍这个电子表格插件,是一款纯前端类似excel的在线表格,功能强大.配置简单.完全开源. 官网链接: Luckysheet官网 在线DEMO 特性包含: 表格设置,包括冻结行列.合并单元格.筛 ...

最新文章

  1. 3G突破必须打破漫游费的限制
  2. 19 java程序员面试宝典视频课程之正则表达式
  3. java 文件引用路径_JAVA项目引用文件路径问题
  4. linux操作系统分析实验—基于mykernel的时间片轮转多道程序实现与分析
  5. 安装Ubuntu16.04并安装sogoupiyin for linux
  6. 将yolo标注转换为tensorflow_yolov3标注生成train.txt和test.txt同时做数据清洗
  7. 华为交换机导入配置_华为交换机基础配置1—进入命令行
  8. mac linux netstat -n
  9. kie-api_7.0上的新KIE持久性API
  10. MyBatis动态SQL使用
  11. 身份证号码(最后一位)计算。(使用 Excel 公式,计算 身份证最后一位)
  12. 谷歌浏览器怎么更新升级 谷歌浏览器手动更新方法
  13. 一个公布每天全球被黑网站的站点
  14. 计算机科学创新实验刘琦,刘琦----中国科学院微电子研究所
  15. 2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置... 2
  16. 5、提取snp indel 位点
  17. 感恩节“谢谢”英文怎么说
  18. 德尔玛递交注册:半年营收15亿 小米与欧派是股东
  19. java dispo lock_java实现文件上传和下载(1)
  20. Jira4系列、Jira6系列破解实战

热门文章

  1. python图像对比_Python多种图像处理库的比较与比较
  2. 菜单栏底部线条切换效果
  3. docker部署express项目
  4. 跨浏览器确定一个窗口的大小
  5. o00o0o php,PHP $O00OO0=urldecode eval 解密,记一次商业源码的去后门
  6. Android底部导航栏的实现(RadioGroup和Fragment结合使用)
  7. mongodb获取数组中只符合条件的元素
  8. html非封闭标签,自封闭的html标签
  9. 20200927:Java和Cpp中栈与队列的区别
  10. SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request