惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
F
Full Disclosure
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
NISL@THU
NISL@THU
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
P
Privacy International News Feed
Latest news
Latest news
C
CERT Recently Published Vulnerability Notes
P
Privacy & Cybersecurity Law Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
C
Cybersecurity and Infrastructure Security Agency CISA
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
T
Tor Project blog
A
About on SuperTechFans
博客园 - 司徒正美
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 热门话题
Know Your Adversary
Know Your Adversary
T
Tenable Blog
K
Kaspersky official blog
Simon Willison's Weblog
Simon Willison's Weblog
宝玉的分享
宝玉的分享
有赞技术团队
有赞技术团队
Cisco Talos Blog
Cisco Talos Blog
U
Unit 42
T
The Blog of Author Tim Ferriss
T
Threatpost
D
DataBreaches.Net
Engineering at Meta
Engineering at Meta
P
Palo Alto Networks Blog

博客园 - 灵感之源

.NET的前世今生与将来 技术人生的职场众生相 - 十多年的经验与心得 爆栈之旅 - 从接触到成为经理,从中国到澳洲 - 我这10年来的开发历程 我的软件开发生涯 (10年开发经验总结和爆栈人生) 我的回忆录-青年 爆栈三部曲:数据库开发大系技术栈 (300多技术点) Web前端开发大系概览 (前端开发技术栈) .NET技术大系概览 (迄今为止最全的.NET技术栈) 澳洲生活宝典 (兼我的2013总结) 某连锁酒店泄露数据的分析 我的回忆录 WaterfallTree(瀑布树) 详细技术分析系列 C#开源磁盘/内存缓存引擎 基于STSdb和fastJson的磁盘/内存缓存 怎样记住Integer的最大值(有趣的思维和搞笑的回答) STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构 在ASP.NET MVC 无需Web Form和Report Viewer 预览SSRS报表解决方案 C#写的NoSQL开源项目/系统(系列) 老调重弹:年龄大了,码农何去何从
STSdb,最强纯C#开源NoSQL和虚拟文件系统
灵感之源 · 2013-05-21 · via 博客园 - 灵感之源

2013-05-21 19:37  灵感之源  阅读(21545)  评论()    收藏  举报

回顾

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