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)和实时业务的开发,点击这里看公司介绍。
STSdb,最强纯C#开源NoSQL和虚拟文件系统相关推荐
- 几种开源NOSQL数据库
几种开源NOSQL数据库 2017年06月30日 23:36:13 lm_y 阅读数 13655更多 分类专栏: java 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载 ...
- 开源NoSQL数据库介绍
目录 一.概述 二.NoSQL数据库 1. MongoDB 2. Cassandra 3. CouchDB 4. Hypertable 5. Redis 6. Riak 7. Neo4j 8. Had ...
- 开源NoSQL数据库ArangoDB浅析
参考文章:开源NoSQL数据库ArangoDB浅析 https://www.arangodb.com/2017/02/arangoexport-tool-exporting-data-arangodb ...
- 二维码检测哪家强?五大开源库测评比较
作者 | 周强 来源 | 我爱计算机视觉(ID:aicvml) 二维码已经进入人们的日常生活中,尤其是日本Denso Wave公司1994年发明的QR码,由于其易于检测.写入信息量大.提供强大的纠错机 ...
- 盘点11个面向文档的开源NoSQL数据库
MongoDB是一个介于关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型. ...
- 第一次接触 SharpHsql(纯C#开源数据库引擎)
在 开源中的灵感之源 的blog上看到这篇文章 开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本 这篇文章,着实幸福了一阵. 类似的数据库引擎我用过不少,比如 sqlit ...
- drive数据集_英伟达的最强人脸GAN开源了,它吃的高清数据集也开源了
栗子 假装发自 凹非寺 量子位 出品 | 公众号 QbitAI 你大概还没忘记,英伟达去年年底推出的GAN,它合成的人脸甚至骗得过肉眼. 如今,它终于有了自己的名字,叫StyleGAN.顾名思义,GA ...
- 本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github
一.关于NoSQL的项目需求 这些年在做AgileEAS.NET SOA 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢 ...
- 又发现一款纯js开源电子表格Luckysheet
据官网介绍这个电子表格插件,是一款纯前端类似excel的在线表格,功能强大.配置简单.完全开源. 官网链接: Luckysheet官网 在线DEMO 特性包含: 表格设置,包括冻结行列.合并单元格.筛 ...
最新文章
- 3G突破必须打破漫游费的限制
- 19 java程序员面试宝典视频课程之正则表达式
- java 文件引用路径_JAVA项目引用文件路径问题
- linux操作系统分析实验—基于mykernel的时间片轮转多道程序实现与分析
- 安装Ubuntu16.04并安装sogoupiyin for linux
- 将yolo标注转换为tensorflow_yolov3标注生成train.txt和test.txt同时做数据清洗
- 华为交换机导入配置_华为交换机基础配置1—进入命令行
- mac linux netstat -n
- kie-api_7.0上的新KIE持久性API
- MyBatis动态SQL使用
- 身份证号码(最后一位)计算。(使用 Excel 公式,计算 身份证最后一位)
- 谷歌浏览器怎么更新升级 谷歌浏览器手动更新方法
- 一个公布每天全球被黑网站的站点
- 计算机科学创新实验刘琦,刘琦----中国科学院微电子研究所
- 2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置... 2
- 5、提取snp indel 位点
- 感恩节“谢谢”英文怎么说
- 德尔玛递交注册:半年营收15亿 小米与欧派是股东
- java dispo lock_java实现文件上传和下载(1)
- Jira4系列、Jira6系列破解实战
热门文章
- python图像对比_Python多种图像处理库的比较与比较
- 菜单栏底部线条切换效果
- docker部署express项目
- 跨浏览器确定一个窗口的大小
- o00o0o php,PHP $O00OO0=urldecode eval 解密,记一次商业源码的去后门
- Android底部导航栏的实现(RadioGroup和Fragment结合使用)
- mongodb获取数组中只符合条件的元素
- html非封闭标签,自封闭的html标签
- 20200927:Java和Cpp中栈与队列的区别
- SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request