设为首页收藏本站

新白山黑水

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
新白山黑水的GGMM照片戏说白山黑水ID含义与您一起分享东北大学的鬼故事.
查看: 1|回复: 0

在PostgreSQL中使用数组时值得注意的一些地方

[复制链接]
发表于 2019-4-15 21:24:29 | 显示全部楼层 |阅读模式
在PostgreSQL中使用数组时值得注意的一些地方
<p>在Heap中,我们依靠PostgreSQL支撑大多数后端繁重的任务,我们存储每个事件为一个hstore blob,我们为每个跟踪的用户维护一个已完成事件的PostgreSQL数组,并将这些事件按时间排序。 Hstore能够让我们以灵活的方式附加属性到事件中,而且事件数组赋予了我们强大的性能,特别是对于漏斗查询,在这些查询中我们计算不同转化渠道步骤间的输出。</p>
<p>在这篇文章中,我们看看那些意外接受大量输入的PostgreSQL函数,然后以高效,惯用的方式重写它。</p>
<p>你的第一反应可能是将PostgreSQL中的数组看做像C语言中对等的类似物。你之前可能用过变换阵列位置或切片来纵老两口平淡婚姻62年 见证省会大发展数据。不过要小心,在PostgreSQL中不要有这样的想法,特别是数组类型是变长的时,比如JSON、文本或是hstore。如果你通过位置来访问PostgreSQL数组,你会进入一个意想不到的性能暴跌的境地。</p>
这种情况几星期前在Heap出现了。我们在Heap为每个跟踪用户维护一个事件数组,在这个数组中我们用一个hstore datum代表每个事件。我们有一个导入管道来追加新事件到对应的数组。为了使这一导入管道是幂等的,我们给每个事件设定一个event_id,我们通过一个功能函数重复运行我们的事件数组。如果我们要更新附加到婚后男人喜欢出轨的理由有哪些?事件的属性的话,我们只需使用相同的event_id转储一个新的事件到管道中。</p>
<p>所以,我们需要一个功能函数来处理hstores数组,并且,如果两个事件具有相同的event_id时应该使用数组中最近出现的那个。刚开始尝试这个函数是这样写的:</p><p>
</p><p>
<pre>
-- This is slow, and you don't want to use it!
-- Filter an array of events such that there is only one event with eac约会别频繁 暧昧期的男女相处法则h event_id.
-- When more than one event with the same event_id is present, take the latest one.
CREATE OR REPLACE FUNCTION dedupe_events_1(events HSTORE[]) RETURNS HSTORE[] AS $$
SELECT array_agg(event)
FROM (
-- Filter for rank = 1, i.e. select the latest event for any collisions on event_id.
SELECT event
FROM (
-- Rank elements with the same event_id by position in the array, descending.
</pre>
<p>这个查询在拥有2.4GHz的i7CPU及16GB Ram的macbook pro上测得,运行脚本为:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|东北大学 Neu.com.cn ( 沪ICP备06058577号  

GMT+8, 2019-4-26 06:06 , Processed in 0.090488 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表