首页
精选文章NewSQL查看全文NewSQL是融合了NoSQL技术的关系型数据库,其主要目标是为了解决一致性和分区容忍性。Nosql数据库的目标是为了解决大规模数据的存储问题,所以分区容忍性是其主要的设计目标,但是对于关系型数据库而言,一致性是基本的要求。 NewSQL 尝试同时满足NoSQL数据库和关系型数据库的优点(ACID和水平扩展性),目前是大数据领域的解决方案之一。 NewSQL数据库的特性一般包括如下特性: 基于内存的数据存储和数据处理提供较快的处理速度。 通过分区将数据库切分成若干分片的单元,查询在多个单元同时执行并且合并为查询结果。 支持事务。 一般通过二级索引提供更快的信息检索速度。 通过复制技术实现高可用。 通过内置的容灾机制提供更快的容灾恢复时间。 NewSQL和SQL以及NoSQL的区别。 面向内存的设计 传统DBMS采用的面向磁盘的存储结构,数据主要存储在SSD或HDD等块存储设备。块存储设备的读写速度较内存至少慢一个数量级,所以DBMS一般会采用缓冲池的技术将读入的数据块缓在内存中进行缓存,写操作也会利用缓冲池进行缓冲之后批量存储到磁盘来提高效率。相较于内存,磁盘的容量更大,价格更低,面向磁盘的设计成本更低。随着内存成本的大幅度下降,大内存的机器架构可以将数据库中的数据全量或者接近全量的存储在内存中。所以NewSQL采用面向内存的设计可以提升数据库的性能。 H-Store,HyPer,MemSQL、SAP HANA 和VoltDB等NewSQL数据库都采用了面相内存的设计模式。 面向内存的设计一般将热点数据存储在内存中,将不活跃的数据转移到磁盘存储,该架构的实现方案有如下几种: 建立跟踪机制发现内存中不活跃的记录,将其转移到外存进行存储…反射【Golang】查看全文反射是一种机制,可以在运行时获取操作对象的具体类型,而且通过类型可以获取类的构造,包括成员变量以及成员方法,并且可以动态的调用这些方法或者改变这些变量的值。反射是一种元编程的实现方案。 Golang一般认为是一门静态语言。静态语言是指编译时就可以确定变量的数据类型的语言,大多数静态语言要求在使用变量之前必须声明数据的类型。常见的静态语言有C、C++、Golang等。 PHP、JavaScript、Python、Perl等语言的变量在使用前不需要声明数据类型,在运行时根据被赋值的值类型才确定数据的类型,此类语言称为动态语言。 而通过反射的能力,Golang语言可以动态的改变对象的值,甚至可以动态改变数据类型,所以反射使得Golang语言具备了动态语言的能力。 空接口 Golang 语言是静态类型语言,变量的类型在编译期间就已经确定了。 Golang 对象头部没有类型指针,通过自身无法获得类型信息,反射所需要的全部信息都来源于接口。 在传统的面向对象的语言例如Java中,所有的类都继承自一个基类(Java中称为Object),所以该类可以指向所有的对象。 Golang 弱化了传统编程语言中继承的概念,其多态通过组合方式实现,Golang 语言中不需要显式的绑定继承关系,而是通过该类是否实现了另一个接口中的方法判断该类是否实现了该接口。 所以如果有一个空接口没有任何方法,那么所有的类都可以认为继承了这个空接口。编译器在编译过程中,将全部变量的类型信息(runtime._type或reflect.rtype,两者底层数据结构一样布,可以做类型转换)保存在.rodata节中。 在运行期间,反射可以探知、修改、创建对象的类型信息和内存结构…OceanBase查看全文OceanBase是阿里巴巴开源的一款NewSQL数据库。存储引擎 数据库存储引擎一般有两种实现 原地更新(update-in-place ):较常见于传统关系型数据库( MySQL 、Oracle ),这些数据库一般采用的 B+Tree 的结构,有较好的数据局部性,对扫描比较友好。update-in-place 更新记录时直接覆盖原有的数据,会产生大量的随机写,写的过程中会存在并发问题,一定程度上会影响写入性能。 日志更新(log-structure storage): LevelDB 、RocksDB 、HBase 、BigTable 等数据库采用的 LSMTree 结构都是基于日志的。日志更新都采用追加写的模式,过程中不需要锁,不存在并发问题,而且不会有空间碎片,写入性能较高,基于日志的存储一般需要通过异步 compaction 进行GC以及合并各个层级的数据。但是基于日志的存储读路径较长,例如 LSMTree 结构在扫描时需要读取 memtable 、L0层及其余层的数据。 OceanBase 的存储引擎采用日志更新的模式,通过 LSMTree 实现,OceanBase 将数据分为基线数据和增量数据等两部分。 基线数据是指磁盘上已经持久化的数据(SSTable),因为 LSMTree 使用追加写的方式,所以 SSTable 一旦持久化之后,数据一般不再发生变化。 增量数据是指存放在内存的数据(MemTable),所有写入操作都会将数据先存放在增量数据,通过 Redo Log 来保证数据不会发生丢失,MemTable 的数据会在存储容量达到一定阈值时会触发冻结操作( Frozen MemTable ),冻结之后的… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库精选内容 |