首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

切片【Golang】查看全文
切片结构图.png
一般编程语言的数组都是静态大小的,由列表等数据结构提供动态大小的线性数据结构。但是Golang语言提供了可以自动扩容的动态数组——切片(Slice),切片支持追加,遍历,截取、随机访问等能力。

Golang中的切片由切片数据结构以及底层数组构成。 Golang的数据结构是一个值类型的结构体,包含的信息如下: 指向底层数组的指针,切片结构体本身不存储数据,数据都存储在底层的数组上。 切片的长度指切片中元素的个数。 切片的容量是指底层数组可以容纳的元素个数。 切片中元素不一定是从数组的起始位置开始的,所以切片的容量不一定是底层数组的长度,而是底层数组长度减去第一个元素的位置。 多个切片可以复用底层的同一个数组,所以对数组中数值的修改会反应在每个应用它的切片上。 当append数据,切片底层的数组长度不足时,会启动扩容的机制,产生一个新的数组,将数据拷贝到新的数组上。 Golang也提供数组类型的数据结构,数组是长度是不可变化的,需要在声明数组的时候确定的长度的值,一般是传入明确的数组长度或者通过数组的值而确定数组的长度。 切片的声明和数组类似,但是不需要传入切片的长度,或者通过make方式构建,此时传入一个初始长度。

切片不能使用“==”进行比较,所以切片不能作为map结构的Key。
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 ),冻结之后的…
NewSQL查看全文
Spanner.pdf
NewSQL是融合了NoSQL技术的关系型数据库,其主要目标是为了解决一致性和分区容忍性。

Nosql数据库的目标是为了解决大规模数据的存储问题,所以分区容忍性是其主要的设计目标,但是对于关系型数据库而言,一致性是基本的要求。 NewSQL 尝试同时满足NoSQL数据库和关系型数据库的优点(ACID和水平扩展性),目前是大数据领域的解决方案之一。 NewSQL数据库的特性一般包括如下特性: 基于内存的数据存储和数据处理提供较快的处理速度。 通过分区将数据库切分成若干分片的单元,查询在多个单元同时执行并且合并为查询结果。 支持事务。 一般通过二级索引提供更快的信息检索速度。 通过复制技术实现高可用。 通过内置的容灾机制提供更快的容灾恢复时间。 NewSQL和SQL以及NoSQL的区别。 面向内存的设计 传统DBMS采用的面向磁盘的存储结构,数据主要存储在SSD或HDD等块存储设备。块存储设备的读写速度较内存至少慢一个数量级,所以DBMS一般会采用缓冲池的技术将读入的数据块缓在内存中进行缓存,写操作也会利用缓冲池进行缓冲之后批量存储到磁盘来提高效率。相较于内存,磁盘的容量更大,价格更低,面向磁盘的设计成本更低。随着内存成本的大幅度下降,大内存的机器架构可以将数据库中的数据全量或者接近全量的存储在内存中。所以NewSQL采用面向内存的设计可以提升数据库的性能。 H-Store,HyPer,MemSQL、SAP HANA 和VoltDB等NewSQL数据库都采用了面相内存的设计模式。 面向内存的设计一般将热点数据存储在内存中,将不活跃的数据转移到磁盘存储,该架构的实现方案有如下几种:

建立跟踪机制发现内存中不活跃的记录,将其转移到外存进行存储…

热门分类

算法题库

精选内容