HyperLogLog

BigQuery: How to merge HLL Sketches over a window function? (Count distinct values over a rolling window)

◇◆丶佛笑我妖孽 提交于 2020-01-02 18:34:13
问题 Example relevant table schema: +---------------------------+-------------------+ | activity_date - TIMESTAMP | user_id - STRING | +---------------------------+-------------------+ | 2017-02-22 17:36:08 UTC | fake_id_i24385787 | +---------------------------+-------------------+ | 2017-02-22 04:27:08 UTC | fake_id_234885747 | +---------------------------+-------------------+ | 2017-02-22 08:36:08 UTC | fake_id_i24385787 | +---------------------------+-------------------+ I need to count active

Using HLL_COUNT.MERGE outside of SQL

只愿长相守 提交于 2019-12-25 02:47:25
问题 I can use the following query to general all the HLL sketches of the distinct counts: SELECT category, count(distinct city), HLL_COUNT.INIT(city) FROM `table` GROUP BY category And I get something like this: While I would normally use the HLL_COUNT.merge(...) function to get the total count, for example: select 'all -- hll', HLL_COUNT.MERGE(x), null from (select category, count(distinct city), HLL_COUNT.INIT(city) x from `datadocs-163219.010ff92f6a62438aa47c10005fe98fc9.inv` group by category

Redis和其数据类型上手

依然范特西╮ 提交于 2019-12-18 18:45:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 《“Java技术员”成长手册》,包含框架、存储、搜索、优化、分布式等必备知识,都收集在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱,欢迎指导 Redis简介 Redis: REmote DIctionary Server (远程字典服务器)。 Redis 是一个全开源免费(BSD许可)的,内存中的数据结构存储系统,它可以用作 数据库、缓存和消息中间件 。一般作为一个高性能的(key/value)分布式库,基于 内存 运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为 数据结构服务器 Redis 介绍 ​ redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。 ​ redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括 string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型) 。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率

How does the HyperLogLog algorithm work?

喜夏-厌秋 提交于 2019-12-17 06:57:08
问题 I've been learning about different algorithms in my spare time recently, and one that I came across which appears to be very interesting is called the HyperLogLog algorithm - which estimates how many unique items are in a list. This was particularly interesting to me because it brought me back to my MySQL days when I saw that "Cardinality" value (which I always assumed until recently that it was calculated not estimated). So I know how to write an algorithm in O ( n ) that will calculate how

redis详解(3)其他功能

旧时模样 提交于 2019-12-16 10:02:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 慢查询 生命周期 1.client发送命令到redis 2.redis排队 3.redis执行命令(慢查询发生阶段) 4.redis返回结果到客户端 两个配置 slowlog-max-len 先进先出队列 固定长度 保存在内存中 config get slowlog-max-len=128 slowlog-log-slower-than 慢查询阈值(单位:微秒) slowlog-log-slower-than=0,记录所有命令 config get slowlog-log-slower-than=10000 三个命令 slowlog get [n]:获取慢查询队列 slowlog len:获取慢查询队列长度 slowlog reset:清空慢查询队列 运维经验 slowlog-max-len不用设置过大,默认10ms,通常设置1ms slowlog-log-slower-than不要设置过小,通常设置1000 理解生命周期 定期持久化慢查询 pipeline 定义 client批量打包命令发给server server处理n次后按顺序返回结果 命令 N个命令操作 1次pipeline(n个命令) 时间 n次网络+n次命令 1次网络+n次命令 数据量 1条命令 n条命令 redis的命令时间是微妙级别

你真的懂redis的数据结构了吗?

孤街醉人 提交于 2019-12-07 07:48:30
Redis有哪些数据结构? 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 很多人面试时都遇到过这种场景吧? 其实除了上面的几种常见数据结构,还需要加上数据结构HyperLogLog、Geo。 可是很多人不知道redis 不仅有上面的几种数据结构,还内藏了内部的数据结构。即redis可以分为外部数据结构和内部数据结构。 1. 如何查看redis的数据结构? 1.1 如何查看redis的外部数据结构? 可以使用 type 命令,返回key的类型,如 string , list , set , zset , hash 和 stream,实例如下: redis> SET key1 "value" "OK" redis> LPUSH key2 "value" (integer) 1 redis> SADD key3 "value" (integer) 1 redis> TYPE key1 "string" redis> TYPE key2 "list" redis> TYPE key3 "set" redis> 1.2 如何查看redis的内部数据结构 可以通过object命令来查看。object命令允许从内部察看给定 key 的 Redis 对象。 它通常用在除错(debugging)或者了解为了节省空间而对 key 使用特殊编码的情况。

聊聊redis的数据结构的应用

风流意气都作罢 提交于 2019-12-06 02:12:50
序 本文主要研究一下redis的数据结构的应用 string 最常用的就是incr操作,比如可以用来维护用户在某个抽奖活动的剩余抽奖次数 setnx方法可以用来实现分布式锁 hashmap 可以用来存储session,作为分布式session的一个实现方案 可以用来存储用户购物车,value值存储的key为物品,value为其数量 set set可以用来存储每个标签对应的文章id 也可以用来存储每个文章的已投票用户id,通过add返回值可以判断该值之前是否已经存在 zset zset可以用来存储文章的得票数,使用得票数作为score,使用zset排序得出投票最高的前N篇文章 或者用来存储最近登录的用户id,使用时间作为score,使用zset排序得出最近登录的前N个用户id 也可以存储用户最近浏览的物品,使用时间作为score,使用zset排序得出用户最近浏览的前N个物品 也可以存储物品最近浏览的用户,使用时间作为score,使用zset排序得出最近浏览该物品的前N个用户 list 可以作为简单的消息队列,通过list的lpush以及brpop作为消息队列的入队及消费的操作 hyperloglog 用来粗略统计网站的每日UV geo( 底层使用zset ) 使用geo来存储poi信息,比如存储门店的经纬度,之后可以根据半径查询附件的门店信息 bitmaps( 底层是string结构

关于 Postgres 独特之处的采访 —— 扩展

左心房为你撑大大i 提交于 2019-12-05 04:36:21
本文作者: Craig Kerstiens ,目前在负责 @citusdata 的云团队。Citus 将 Postgres 扩展为可水平扩展的分布式数据库。本文是他之前一个好友采访他的记录。 以下是采访内容: 我之前时常跟各种开发者共进晚餐,基本上都认为开发者(包括他们自己)可能会有些自以为是。例如,有人说:“我爱Postgres,但我不知道为什么。” 我想他们应该是坐错了餐桌,以 Postgres 为例。。。经常有人问 我为什么选择 Postgres 。 实际上,一年多以前,好朋友 Dimitri Fontaine 在写一本 Postgres 的书,他询问是否可以采访我。我一直说他们缺少关于 Postgres 的好书,不过这个好友做了一件非常好的事,这本书提供针对开发人员(也包括 DBA)提供了很好的指南。但他希望能做得更好。 接下来是本书访谈的摘录。 介绍 自从被 Microsoft 收购以来, Craig 领导了 @citusdata 云团队 ,该团队 现在正在运行 Azure Postgres 的产品 。Citus 将 Postgres 扩展为可水平扩展的分布式数据库。如果您有一个数据库,尤其是Postgres,则需要扩展到更多的节点(通常在100GB以上),Craig 总是很乐意聊天,看看 Citus 是否可以提供帮助。 Craig 之前在 @heroku PaaS

Redis源码剖析--源码结构解析

早过忘川 提交于 2019-12-04 07:11:10
如何阅读 Redis 源码? 找工作那会儿,看了黄建宏老师的《Redis设计与实现》,对redis的部分实现有了一个简明的认识。在面试过程中,redis确实成为了面试官考核我的一个亮点,恰好以后的工作又与redis有着千丝万缕的联系,于是就想趁着毕业前的这段时间把redis的源代码研究一下,为以后的工作打个良好的基础。 Redis简介 redis全称REmote DIctionary Server,是一个由Salvatore Sanfilippo写的高性能key-value存储系统,其完全开源免费,遵守BSD协议。Redis与其他key-value缓存产品(如memcache)有以下几个特点。 + Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 + Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 + Redis支持数据的备份,即master-slave模式的数据备份。 Redis的性能极高且拥有丰富的数据类型,同时,Redis所有操作都是原子性的,也支持对几个操作合并后原子性的执行。另外,Redis有丰富的扩展特性,它支持publish/subscribe, 通知,key 过期等等特性。 Redis更为优秀的地方在于,它的代码风格极其精简,整个源码只有23000行

Redis的高级特性一览

穿精又带淫゛_ 提交于 2019-11-29 06:15:12
更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。 应用场景 缓存系统:用于缓解数据库的高并发压力 计数器:使用Redis原子操作,用于社交网络的转发数,评论数,粉丝数,关注数等 排行榜:使用zset数据结构,进行排行榜计算 实时系统:使用Redis位图的功能实现布隆过滤器,进而实现垃圾邮件处理系统 消息队列:使用list数据结构,消息发布者push数据,多个消息订阅者通过阻塞线程pop数据,以此提供简单的消息队列能力 > 之所以说简单,是因为Redis官方不提供可靠消费/发布的机制;需要自行实现故障转移、队列持久化、队列监控和流量控制等mq具备的功能; 高级功能 慢查询 慢查询只记录Redis在处理存储的时间计数(图中的3步骤),并不包含网络通信时间和排队时间,所以客户端超时分析时要综合每个因素。 注意: 慢查询保存数量参数不要设置过小,同时最好能定期持久化慢查询记录,方便历史问题排查。 pipline pipline用于异步处理大量Redis请求。 注意: 大量任务需要划分出多个pipline进行操作(否则,网络和等待时间都承受压力)。 pipline每次只能作用在一个Redis节点上。 M操作(mget,mset类似的指令)相比pipline,前者是原子操作,后者并不是。Redis会把一个携带很多命令的pipeline拆分成几个子命令。