首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于RocksDB编写一个简单的SQL数据库|得物技术

一、前言数据库DBMS是当前互联网开发者最熟悉的基础设施之一,很多后端开发者的入门项目就是一个简单的基于MySQL的数据管理系统。...笔者一直想自己编写一个简单的SQL数据库,正好最近正在学习RocksDB和Zig语言的内容,就想利用这个机会作为学习成果的检验,于是就有了这个小项目。...二、什么是RocksDBRocksDB是由Facebook开发的一款高效的嵌入式键值存储引擎,基于Google的LevelDB进行了多项优化。...RocksDB是C++开发的,不过它提供了一套C语言API,为不会C++的开发者提供了便利。三、什么是Zig语言Zig语言是一种新兴的系统编程语言,由Andrew Kelley于2015年开始开发。...,现在我们只需要将这些组件拼装起来,加入输入参数处理以及结果的打印就可以完成这个小型的SQL数据库了。

10500

Facebook的RocksDB简介

1、简介 RocksDB是FaceBook起初作为实验性质开发的一个高效数据库软件,旨在充分实现快存上存储数据的服务能力。...3、Features Column Families RocksDB支持将一个数据库实例分片为多个列族。...Iterator也可以实现RangeScan的逆序遍历,当执行Iterator时,用户看到的是一个时间点的一致性视图。Snapshot接口可以创建数据库在某一个时间点的快照。...当使用Iterator时,会对数据库相应时间点的所有底层文件增加引用计数,直到Iterator结束或者释放了引用计数后,这些文件才允许被删除。...GetUpdatesSince接口可以提供tail DB transction log的功能。RocksDB的tranction log记录在数据库目录中,当日志文件不再需要时就会move到归档目录。

2.4K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基于 RocksDB 实现高可靠、低时延的 MQTT 数据持久化

    在之前的版本中,EMQX 开源版采用了基于内存的会话存储,企业版则在此基础上进一步提供了外部数据库存储方案,借此实现数据持久化。...目前这一功能已进入正式开发阶段,预计将在 5.1.0 版本中和各位用户见面。本文是对这一特性的抢鲜技术分享。...除了 RocksDB 之外,我们还主要考察了以下数据库:Mnesia: Mnesia 是 Erlang/OTP 自带的分布式实时数据库系统,在 Mnesia 集群中,所有节点都是平等的。...数据分发RocksDB 作为嵌入式数据库,不具备集群内数据分发的能力。在需要节点间传递数据的操作中,如会话从一个节点移动至另一个节点,会通过 EMQX 的消息分发机制处理。...结语基于 RocksDB 实现的原生 MQTT 会话持久化是 EMQX 发布以来的一项突破性的重要功能变革,这一能力将为开源用户提供更可靠的业务保证,可以不受限制地充分利用 MQTT 协议特性进行物联网应用开发

    1K20

    RocksDB 的范围查询是如何优化的?

    MySQL 的存储引擎除了最常用的是 InnoDB 引擎之外还有一个 MyRocks 引擎也经常会用到,它是基于 RocksDB 开发的一套存储引擎,比 InnoDB 性能要高出 N 倍。...我们知道 RocksDB 磁盘上的每个SST 文件里面里面都存了一个布隆过滤器,布隆过滤器的内容通常是缓存(固定)在内存中的。...但问题是布隆过滤器也是不存在范围查询的能力的,通常也只能判断一下过滤器中是否存在某个 Key。为了解决这个问题,RocksDB 引入了 prefix_extractor ,它可以很好的解决这个难题。...这个「前缀布隆过滤器」 Add 进来的 Key 不再是原来的 Key,而是 Key 的固定长度的前缀,它带来的好处之一是布隆过滤器占用的空间变小了,坏处是误判率也会跟着提高了一点。...因为单个 SST 文件的 Key 数量是有限的,前缀设置的比较短的话,对应的的前缀数量也会非常少,消耗的内存就可以忽略不计了。 聪明的同学可能想到了,这个前缀的长度取多少比较合适呢?

    3.6K30

    HarmonyOS 开发实践——基于关系型数据库的数据持久化

    关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。...关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。...场景一:基于RDB已提供API的数据库基础使用场景二:基于executeSql、querySql执行增删改查复杂SQL语句场景三:事务的使用场景四:批量插入数据的不同实现方式及性能对比场景五:数据库备份与恢复场景六...核心代码文中的操作主要基于如下的数据库,详细数据库使用步骤可参考://创建数据库及相关表export default class Rdb{  rdbStore?...:基于executeSql 、 querySql 执行增删改查复 杂 SQL 语句方案在实际使用过程中,复杂的SQL语句可能无法直接通过场景一提供的方式实现,此时需要开发者通过executeSql、querySql

    21620

    基于JSON的Oracle数据库应用程序开发(与MongoDB兼容)

    旨在帮助您了解为什么应用程序开发通常将JSON作为数据持久性格式,并且为什么Oracle数据库中的JSON功能完全适合解决开发人员的需求,这些开发人员寻求一个文档存储来持久保存、查询和处理应用程序数据。...另一个处理JSON的需求来自于基于JSON的API的普及性:REST服务使用JSON输入和输出。如果将这些JSON值映射到表中,如果第三方API发生更改并且不再与表匹配,应用程序可能会出现问题。...一个“IS JSON” SQL检查约束确保列只包含有效的JSON文档,允许数据库理解该列正在用作JSON文档的容器。 Oracle的JSON功能侧重于为灵活架构的开发和基于文档的存储提供全面支持。...因此,尽管Oracle数据库知道给定列包含JSON文档,但这些文档是在没有数据库了解其内部结构(键/值对)的情况下存储、索引和查询的。开发人员可以根据需要自由更改JSON文档的结构。...数据库对这些文档中包含的键没有强加任何限制。而且,对于习惯于面向对象编程环境的开发人员来说,API调用更简单。

    23530

    SMProxy:基于 MySQL 协议,Swoole 开发的 MySQL 数据库连接池

    Swoole MySQL Proxy 一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池。...原理 将数据库连接作为对象存储在内存中,当用户需要访问数据库时,首次会建立连接,后面并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。...也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。超出最大连接数会采用协程挂起,等到有连接关闭再恢复协程继续操作。...特性 支持读写分离 支持数据库连接池,能够有效解决 PHP 带来的数据库连接瓶颈 支持 SQL92 标准 采用协程调度 支持多个数据库连接,多个数据库,多个用户,灵活搭配 遵守 MySQL 原生协议,跨语言...,跨平台的通用中间件代理 支持 MySQL 事务 支持 HandshakeV10 协议版本 完美兼容 MySQL4.1 - 8.0 兼容各大框架,无缝提升性能 设计初衷 PHP 没有连接池,所以高并发时数据库会出现连接打满的情况

    2.2K20

    一文搞懂Flink rocksdb中的数据恢复

    当我们设置 rocksdb state backend 时,并且从 checkpoint 重启时,首先进入 RocksDBKeyedStateBackendBuilder 的 getRocksDBRestoreOperation...state 数据下载到 temporaryRestoreInstancePath 并且作为一个临时的 RocksDB 实例的数据目录 try (RestoredDBInstance tmpRestoreDBInfo...rockdb 实例的数据写入到 rocksdb 中 try (RocksIteratorWrapper iterator = RocksDBOperationUtils.getRocksIterator...RocksDBIncrementalCheckpointUtils.beforeThePrefixBytes(iterator.key(), stopKeyGroupPrefixBytes)) { // insert data to rocksdb...sstFiles、miscFiles 下载到 临时指定的路径中,然后基于这个临时目录启动一个临时的 rockdb,然后将临时的 rockdb 中的数据导入到最终要使用的 rockdb,最后将临时的 rockdb

    1.2K20

    基于Electron的touchbar开发

    Electron是使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用的一个框架,本人之前写的一个放烟花的程序fireworks-cool就是基于这套框架来做的。...electron在跨平台应用方面做的还是挺好的,著名的编辑器VS Code与Atom都是使用Electron来开发的。...昨天研究这个touchbar,真心感觉到了JavaScript的无所不能属性,明天我们开发一个操作系统?。 吹了这么多Electron,我们再说说touchbar吧。...我觉得touchbar是Mac上一个鸡肋的功能,我在使用Mac的时候很少去关注touchbar。昨天忽然想到Electron可以开发桌面应用,那么是否可以做touchbar相关的功能呢?...于是看了下它的官方文档,发现确实是可以开发touchbar相关的功能,不过目前Electron的touchbar还是实验性的API,后续有可能更改也有可能去掉,不过并不影响我们先玩玩它。

    96675

    Flink RocksDB托管内存机制的幕后—Cache & Write Buffer Manager

    前言 为了解决Flink作业使用RocksDB状态后端时的内存超用问题,Flink早在1.10版本就实现了RocksDB的托管内存(managed memory)机制。...关于RocksDB使用托管内存,Flink官方文档给出了一段简短的解释: Flink does not directly manage RocksDB’s native memory allocations...本文先简单介绍一下RocksDB(版本5.17.2)内部的Cache和Write Buffer Manager这两个组件,然后看一眼Flink是如何借助它们来实现RocksDB内存托管的。...RocksDB的Iterator在遍历数据时,会将它要读取的一部分块暂时固定在Cache内,称为Iterator-pinned blocks。...总大小限制在阈值内; 将WBM传给Cache,可以使两者共同控制RocksDB总内存占用量的上限。

    1.6K11

    Kafka基于Receiver的开发

    基于Receiver的方式 这种方式使用Receiver来获取数据。Receiver是使用Kafka的高层次Consumer API来实现的。...receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming启动的job会去处理那些数据。...然而,在默认的配置下,这种方式可能会因为底层的失败而丢失数据。如果要启用高可靠机制,让数据零丢失,就必须启用Spark Streaming的预写日志机制(Write Ahead Log,WAL)。...该机制会同步地将接收到的Kafka数据写入分布式文件系统(比如HDFS)上的预写日志中。所以,即使底层节点出现了失败,也可以使用预写日志中的数据进行恢复。...KafkaUtils.createStream(jssc,​​"spark1:2181,spark2:2181,spark3:2181", ​​"DefaultConsumerGroup",​​topicThreadMap); // 然后开发

    40420

    Nebula Graph 特性讲解——RocksDB 统计信息的收集和展示

    [image.png] 由于 Nebula Graph 的底层存储使用了 RocksDB,出于运维管理需要,我们的社区用户 @chenxu14 在 pr#2243 为 Nebula Graph 贡献了...RocksDB 统计信息收集的功能 通过在 storage 服务配置文件中修改 --enable_rocksdb_statistics = true  即可开启收集 RocksDB 统计信息的功能。...开启后,将会定期将统计信息转储到每个 DB 服务的日志文件中。 最近,chenxu14 为此功能带来了新的用法——支持通过 storage 服务自带的 Web 接口获取统计信息。...下面让我们来体验一下这次的新功能吧~ 在 storage 的配置文件中修改:--enable_rocksdb_statistics = true 以开启收集 RocksDB 统计信息,修改后重启 storage...stats=stats_name 获取部分 RocksDB 统计信息 [image.png] 在返回部分结果的查询地址基础上添加 & returnjson 获取部分 RocksDB 统计信息并以 json

    71720

    基于Prometheus的数据库监控

    初次使用需要大量配置,随着服务器和业务的增长会发现zabbix等传统监控面临很多问题: DB性能瓶颈,由于zabbix会将采集到的性能指标都存储到数据库中,当服务器数量和业务增长快速扩张时数据库性能首先成为瓶颈...指标 指标的查询 Borgmon中通过标签的方式查询指标,基于标签过滤我们可以查询到某个应用的具体指标,也可以查询更高维度的信息 基于标签过滤信息,比如我们基于一组过滤信息查询到host0:80这个app...数据库监控 基于Prometheus的数据库指标采集,我们以MySQL为例,由于MySQL没有暴露采集性能指标的接口,我们可以单独启动一个mysql_exporter,通过mysql_exporter到...部署服务端 对于服务端配置非常简单,由于Prometheus全部基于Go语言开发,而Go语言程序在安装方面非常方便,安装服务端程序只需要下载,解压并运行即可。...而目前结合Prometheus和Grafana的MySQL监控方案已经有开源实现,我们很轻松可以搭建一套基于Prometheus的监控系统 ?

    3.5K100

    如何开发cdn数据库 开发cdn数据库的作用

    cdn数据库是我国目前非常大型的数据库之一,而且目前开发一个cdn数据库也不是特别困难,下面就介绍一下如何开发cdn数据库。...image.png 开发一个cdn数据库有什么作用 众所周知cdn数据库中存储了大量的网络请求数据,很多用户在浏览网站之前会发出对网站浏览的请求。...如何开发cdn数据库 想要开发一个cdn数据库要到专业的cdn数据库官网上去,网站会自动审核大家提供的个人信息以及颁发开发cdn数据库的个人证书。...大家在开发cdn数据库的时候不仅要进行实名认证同样也要注册一个新型的cdn数据库的域名,这样才不会影响日后cdn数据库的使用。 通过上面的内容已经给大家讲解了如何开发cdn数据库。...数据库的开发和使用对于网络信息的存储拥有着重大的意义,而且在开发完cdn数据库之后,传输数据的速度也会大大加快。

    1.7K40

    嵌入式数据库调研

    最近需要使用嵌入式数据库进行存储应用本地信息,本文章主要进行记录当前比较流行的嵌入式数据库相关的链接,嵌入式数据库往往是以lib的形式存在,常用于持久化存储软件的信息,嵌入式数据库往往和应用软件紧密集成...常用的嵌入式数据库:(主要索引几个我比较感兴趣的数据库) SQLite 嵌入式关系数据库:https://www.sqlite.org/index.html (关系数据库) Apache Derby: ...) 数据目录表:https://dbdb.io/ (包含很多数据库的介绍,很好的网站,可以理清众多数据库之间的关系) LevelDB:https://github.com/google/leveldb(...嵌入式K-V数据库) RocksDB :https://github.com/facebook/rocksdb/ (嵌入式K-V数据库,基于leveldb)  https://rocksdb.org/ ...技术选型为 RocksDB 用作嵌入式开发的KV数据库; TiKV:https://github.com/tikv/tikv https://tikv.org/ (国内的团队开发的,基于rocksdb但不是嵌入式的

    1.5K20
    领券