读模型

1、主键读

最常见的读模型,说是主键,其实也包括其它索引键,或者联合主键。

常见实现:hash,时间复杂度可以接近 O(1);B 树或变种:时间复杂度接近 O(log(n))。

关于 B 树和变种:

B 树(B-树):本质上是二叉查找树的升级版,变成了平衡的 N 叉查找树,这个 N 的范围根据磁盘一次读取的块大小来调整,这样复杂度 log n 的底数就从 2 变成一个更大的数,减少了树的高度。除此以外,还有一些额外的优化,比如为了插入和删除的性能考虑,通常准备一些预留的空间,只要在当前块或者邻近块中找到空间写入,就避免了开销巨大的所有记录向后偏移的操作。

B 树的阶:

一棵 m 阶的 B 树最多有 m 棵子树;

根节点至少有两棵子树;

每个非根分支节点至少有 ceil(m/2) 棵子树;

叶节点全部在同一层;

有 x 个孩子的非叶节点恰有 x-1 个递增排列的关键字。

图片来自此页面。

B+树:和 B 树相比,改变的地方包括:

全部关键字信息都放在叶子节点;

所有叶子节点串成一个 linked list 以便搜索;

存放重复的搜索键。

B*树在 B+树基础上做了进一步改进:

非叶子节点增加指向兄弟节点的指针(用以在节点满时,可以往兄弟节点放数据,减少节点创建的情况);

非叶子节点至少为 2/3 满的(关键字字数至少为最大值的 2/3)。

2、指定页查询

指定页就意味着具备分页的概念,比如在 DynamoDB 的查询接口设计上,可以传入一个 LastEvaluatedKey 这样的对象,通过主键读的方式定位到本页读取的起始位置。但是,如果要随机指定页码号的查询,这种情况的复杂度在不同实现的情况下就有很大差异了,有的可以直接算出该页的位置,有的则需要从第一页开始一页页找下去。

常见实现:指定起始位置,条件查询的情况下返回数据子集。

3、范围查询

首先,数据可以根据某一属性排序,然后才存在范围查询的概念。比如用户的年龄在某个区间之内的查询。

常见实现:B 树及其变种(这种情况下 B+树比 B 树优越的地方就体现出来了,B+树可以直接扫描叶子节点的 linked list 即可)。

4、全数据扫描

这种访问模型通常意味着低速和高开销,一般多用作异步任务,比如报表系统,在低访问时段做定时的数据统计。通常非索引键查询本质上也是全数据扫描。

例子:数据库全表扫描,Hadoop 上的数据集处理任务。

5、全文检索

常见实现:倒排索引。

6、前缀/后缀匹配

前缀匹配:Trie 树;后缀匹配:后缀树。参见 《Trie 树和其它数据结构的比较》。

7、条件查询

写模型

1、异步更新

先返回,不关注更新的事务性,更新操作在后台完成,这种方式具备最快的结果返回速度。

2、队列/双端队列

这种情况适用于吞吐量比较大并且非常不稳定的情形,借助队列的缓冲作用;也有一种是需要处理写入次序的问题,借助优先级队列的有序性。

3、批量写

很多情况下是异步的数据处理,比如数据回填、批量数据导出等等。

4、根据查询结果更新

就是把查询和更新这两步过程合并,使之具备原子性。比如 Java 中的 compareAndSet 操作,比如数据库的 update 语句跟上 where 子句等等。

5、插入或更新

upsert,如同 hash map 中的 put,不管之前该记录是否存在,存在就覆盖,不存在就插入。

6、更新到多个 replication

几乎所有的产品化的存储系统都会考虑 replication,对于数据可靠性的问题,软件层面上冗余多份数据是唯一的办法。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

blp模型 上读下写_读写模型整理笔记相关推荐

  1. blp模型 上读下写_Golang 并发模型系列:1. 轻松入门流水线模型

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...

  2. blp模型 上读下写_Java高并发编程(三):Java内存模型

    1 Java内存模型的基础 在并发编程里,需要处理两个问题: 线程之间如何通信 线程之间如何同步. 通信指的是线程之间以何种机制来交换信息.在命令式编程里中,线程之间的通信机制有两种:共享内存和消息传 ...

  3. blp模型 上读下写_CreditX在线借贷欺诈检测框架BLP

    本次介绍的文章是来自于氪信科技的<Behavior Language Processing with Graph based Feature Generation for Fraud Detec ...

  4. 《NJUPT》网络信息安全_期末PPT整理笔记

    零.基础知识 信息安全包括:信息安全管理.物理场所安全.设备的硬件安全.软件安全(操作系统/其他系统软件应用软件).网络信息安全(TCP/IP ).密码学的应用.信息隐藏.其他不常见技术 不同的研究方 ...

  5. java文件边读边写_[Java教程]node.js 利用流实现读写同步,边读边写

    [Java教程]node.js 利用流实现读写同步,边读边写 0 2017-09-10 13:00:14 //10个数 10个字节,每次读4b,写1blet fs=require("fs&q ...

  6. js实现日历框上一日下一日_一日三项令人兴奋的Lucene功能

    js实现日历框上一日下一日 昨天是富有成效的一天:突然,Lucene有了三个令人兴奋的新功能. 表达式模块 昨天提交的第一个功能是新的expressions模块 . 这使您可以使用任意String表达 ...

  7. python保存模型的路径怎么写_使用python在MongoDB中保存机器学习(ML)和深度学习(DL)模型...

    我们知道,当我们训练机器学习或深入学习模型时,我们必须保存训练过的模型,以便将来进行预测.现在的训练模型非常昂贵,所以如果我们能够保存它们并将其用于解决其他一些问题.例如,一个训练过的能够识别汽车的神 ...

  8. 颜色渐变从上往下渐变_好的Golly,网络上的渐变

    颜色渐变从上往下渐变 梯度正在悄悄卷土重来. 有一阵子他们属于迈阿密虎钳和​​龙舌兰日出世界,然后他们增加了1980年代的杂志的深度,然后出现了Geocities –好吧,让我们不谈过去. 如今,网络 ...

  9. revit模型怎么在手机上看_沙盘模型应该怎么看?一定要警惕这些问题

    买期房的话肯定会经历看沙盘模型这个步骤,虽然说沙盘模型只是呈现楼盘整体规划的一种设计,时机验收房屋可能存在差别,但是买房子还是应该结合沙盘来选房子的,毕竟关系到自己今后的居住环境,在售楼处展示的东西里 ...

最新文章

  1. 学习笔记-express路径问题
  2. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
  3. python曲线拟合笔记
  4. 简单工厂模式(Simple Factory)
  5. Json 时间 转换为 Javascript 时间 Date Jquery 调用WCF
  6. 一体化点焊机将要取代分体式焊钳在汽车制造生产线上的使用
  7. php java 通信_PHP与Java进行通信的实现方法
  8. Python使用exec自动生成代码并执行,同时得到返回的变量
  9. Zabbix(二)通过API在zabbix系统中查看、删除及创建监控主机
  10. JS中遍历普通数组和字典数组的区别
  11. dedecms织梦入门
  12. 钉钉 e应用 mysql_钉钉E应用入门总结
  13. ​以太网的发展历史、演化过程以及工作基理
  14. 【单片机毕业设计】【mcuclub-cl-022】基于单片机的隧道检测的设计
  15. 【媒体聚焦】“我们为什么要为景安点赞”——记景安网络十四年峥嵘岁月
  16. Linux下安装YASM--编译x264
  17. Android调用相机拍照高清原图(兼容7.0)
  18. 干货分享--企业微信社群促活的12种方式
  19. Web前端之布局模型
  20. 转贴:谁说我会画板?

热门文章

  1. 摧毁公司的不是对手,而是价值观
  2. Unity中实现放大镜的功能
  3. dux主题页面添加html,DUX主题文章页相关推荐双栏显示
  4. Multisim 安装报错:encountered an improper argument 解决方案(部分仪器实用)
  5. Eth 01 - Eth以太网控制器驱动概述和API讲解
  6. 友盟添加网站统计步骤
  7. 销售管理系统哪种好?
  8. shell基础--条件判断if和case
  9. 达梦数据库DM8-DM管理工具介绍和简单使用
  10. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(17):函数矩阵的微分和积分