STSdb,最强纯C#开源NoSQL和虚拟文件系统
2013-05-21 19:37 灵感之源 阅读(21358) 评论(79) 编辑 收藏 举报
回顾
几个月前写了一篇文章,关于 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)和实时业务的开发,点击这里看公司介绍。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
2004-05-21 简便转换VS.NET 2003创建的 工程到 VS.NET 2002
2004-05-21 VS.NET中的一些拖放操作