本文是论文An Efficient Publish / Subscribe Index for E-Commerce Databases的阅读笔记。

Pub/Sub系统

这篇文章提出了一个多级索引解决方案,用于解决Publish / Subscribe系统的索引问题。其中,Publisher是内容的生产者,可以产生一系列消息,Subscriber是内容订阅者,捞出感兴趣的消息。这个系统假设订阅者的数量很大,所以来一个消息,快速找出哪些订阅者会感兴趣,就需要索引。Pub / Sub可以理解成数据库,pub发布一个query,符合条件的sub就跳出来称为返回结果。在广告系统中,可用于快速从广告池里召回符合定向条件的广告。

需求

假设Pub / Sub系统的消息可以用DNF,CNF表示,那我们只需要考虑布尔表达式。论文中定义了以下常用术语:

术语 说明 广告系统用例
predicate 断言,bool表达式 定向条件,e.g. 年龄=18
subscription 合取范式或析取范式 广告,e.g. 男 ^ 30岁 ^ (手机 ^ 30天内购买)
event 合取范式或析取范式 触发请求/查询
A 属性 年龄
fopf_{op}fop​ 操作符 =
oˉ\bar{o}oˉ 操作数 18

初版

为了简化问题,我们先假设:

  1. 操纵符只有三种:=, >=, <=
  2. 只考虑析取范式DNF
  3. 每个DNF从句只有1种属性

论文中的例子: 以下这6个sub,满足上面3个假设

多级索引----第一级

对数据集(上述6个sub)的属性做频数统计,每个sub选出频数最小的属性作为主属性(pivot attr), 这样全集就被划分成了不相交的子集(倒排链)。来一个event, 遍历它的所有属性,若在pivot set里,则取出对应的倒排链,再做进一步匹配,无关的倒排链被略过。

多级索引----第二级

  1. 对于每个主属性得到的sub子集(e.g. 主属性为AAA,对应S1,S2,S4S_1,S_2,S_4S1​,S2​,S4​), 把它们的pred(S1S_1S1​ 4个, S2S_2S2​ 2个, S3S_3S3​ 1个)按op划分(假设只支持=, >=, <=),属性可排序、操纵数可排序,便得到pred的有序链表,方便之后的链表区间查找
  2. 【优化】将属性用segment分筒,属性相同桶相同
  3. 【优化】hash(属性,操纵数)或hash(属性)做位签名,签名符合的进一步匹配,签名不符合的直接跳过
  4. 有序链表区间查找
  5. 每个sub有一个计数器,初始化为sub中pred的数量,匹配一次自减1,等于0时,完全匹配召回

泛化版

假设:操作符依然只有3种: =, >=, <=,但每个从句中属性种数可以>=1
需要的改变:
【泛化】pivot attr变成pivot attr set,最短从句的所有attr作为sub的pivot attr set
【泛化】计数器从int变为bit_map, 位长为从句个数,初始化为全1,匹配一个从句,对应的位上置0,全0时完全匹配,召回

opIndex多级索引笔记相关推荐

  1. 数据分析索引总结(中)Pandas多级索引

    Datawhale干货 作者:闫钟峰,Datawhale优秀学习者 寄语:本文介绍了创建多级索引.多层索引切片.多层索引中的slice对象.索引层的交换等内容. 创建多级索引 1. 通过from_tu ...

  2. 4.1.2 OS之文件逻辑结构(顺序文件、索引文件、索引顺序文件、多级索引顺序文件)关于数据库的索引如聚簇索引可以看一下索引文件例题的解析,感觉还是可以收获到东西的

    文章目录 0.思维导图 1.无结构文件 2.有结构文件 有结构文件的逻辑结构 顺序文件 索引文件 索引顺序文件 多级索引顺序文件 0.思维导图 1.无结构文件 2.有结构文件 定长记录: 不定长记录: ...

  3. python多级索引修改

    创建多级索引 cols = pd.MultiIndex.from_tuples([("a","b"), ("a","c" ...

  4. pandas mysql index_Pandas从入门到精通(3)- Pandas多级索引MultiIndex

    首先了解一下什么是多级索引,以及它的作用,为什么要有这个玩意. 多级索引也称为层次化索引(hierarchical indexing),是指数据在一个轴上(行或者列)拥有多个(两个以上)索引级别.之所 ...

  5. numpy第三章-索引器、多级索引

    一.索引器 df = pd.read_csv(....) 下面的df都是指数据名 1.列索引 从表中取出一列:df['列名'] 例如:df['Name'] 或者用 .列名 取出,这和 [列名] 是等价 ...

  6. 【操作系统】多级索引、混合索引例题

    多级索引: 文件系统采用多重结构搜索文件内容.设块长为512B,每个块号占3B,如果不考虑逻辑块号在物理块中所占的位置,分别求二级索引和三级索引时可寻址的文件最大长度. 设块长为512B,每个块号占3 ...

  7. 操作系统原理,文件系统的概念与实现,概念,需求,文件分类,逻辑结构,数据结构,文件控制块和文件目录,基本文件操作,多级目录,文件物理结构,Unix的文件多级索引结构

    操作系统原理,文件系统的概念与实现,概念,需求,文件分类,逻辑结构,数据结构,文件控制块和文件目录,基本文件操作,多级目录,文件物理结构,Unix的文件多级索引结构 基本概念 一.文件概念: 1.文件 ...

  8. mysql 索引- 笔记

    索引 mysql最常用的索引结构是btree(O(log(n))),但是总有一些情况下我们为了更好的性能希望能使用别的类型的索引.hash就是其中一种选择,例如我们在通过用户名检索用户id的时候,他们 ...

  9. 《MySQL——索引笔记》

    目录 回表 覆盖索引 最左前缀原则 联合索引的时候,如何安排索引内的字段顺序? 索引下推 重建索引问题 联合主键索引和 InnoDB 索引组织表问题 in与between的区别 回表 回到主键索引树搜 ...

最新文章

  1. GitHub Checks API帮助应用实现进一步的持续集成
  2. python中matplotlib自定义设置图像标题使用的字体类型:获取默认的字体族及字体族中对应的字体、自定义设置图像标题使用的字体类型
  3. 开通域名绑定DDNS
  4. 【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 )
  5. Webstorm+cordova打包vue成Android项目
  6. oracle编写备份数据库代码,oracle_oracle数据库创建备份与恢复脚本整理,1:创建用户 复制代码 代码如 - phpStudy...
  7. spring框架三层架构_Spring框架架构
  8. 菜鸟启动“快递包装换鸡蛋”活动 史上最低碳的一届“双11”来了
  9. JxBrowser开启调试模式,JxBrowser debug
  10. 二、appium的原理
  11. 程序员为什么要写博客
  12. redis集群节点宕机
  13. 《R语言入门与数据分析》
  14. 【滤镜算法】低多边形风格介绍及Matlab实现
  15. Win10+Vs+CMake安装OpenCV+contrib
  16. 利用DOCX文档远程模板注入执行宏代码
  17. Keithley 2400和Keithley 2450 FET(场效应管)的输出特性测量 软件
  18. iOS内购项目的接入与审核问题
  19. Java程序员学习Rust编程
  20. 【操作系统①】——操作系统的定义和功能、操作系统的四大特征【并发 共享 虚拟 异步】

热门文章

  1. [FAQ21007] 电信VoLTE开关默认值设置
  2. python3实现百度翻译
  3. 安卓微信跳转页面、重定向页面空白,ios系统正常、pc正常、安卓浏览器正常。
  4. 小寒也会写程序(四)
  5. filecoin benchmarks v25 GeForce GTX 1080 Ti
  6. 平面设计技法技巧之图形设计
  7. 基于区块链技术的信息服务新架构探讨
  8. 计算机excel上机实训指导,上机实训指导手册——利用Excel进行数据分组和制作统计图表...
  9. ie开始屏蔽旧的java插件_IE将開始屏蔽旧版ActiveX控件
  10. 一次linux oops分析