用wordpress建站效果怎么样/3000行业关键词

用wordpress建站效果怎么样,3000行业关键词,ssm框架做音乐网站,个人公司注册流程及材料对于大数据开发人员而言,处理海量数据的判重操作和基数统计是常见需求,而 RoaringBitmap类型及其相关函数是当前非常高效的一种解决方案,许多大数据库产品已支持RoaringBitmap类型。OceanBase 4.3.3版本,作为专为OLAP场景设计的正…

对于大数据开发人员而言,处理海量数据的判重操作和基数统计是常见需求,而 RoaringBitmap类型及其相关函数是当前非常高效的一种解决方案,许多大数据库产品已支持RoaringBitmap类型。OceanBase 4.3.3版本,作为专为OLAP场景设计的正式发布(GA)版,也具备这一功能。本文重点阐述 RoaringBitmap 的原理、应用场景,并提供 OceanBase 中 RoaringBitmap 的应用示例。

RoaringBitmap 诞生背景简介

海量数据的判重和基数统计需求,难度是数据量大且性能要尽可能好。技术方案的关键就是数据结构及其算法,数据结构也决定了其算法能力空间。

基础的数据结构就是常用的数据类型,如数值、字符串、时间等。假设要业务数据数值化存储,使用整型存储(无符号),其表达的值域是 [0, 232-1],一共 4294967296 个数。如果记录不重复且记录数满配,单就这一列会占用存储空间16GB。这个判重方法有遍历、排序加二分查找、BloomFilter 等。

所以后来有些场景会用Bitmap(位图)存储这个数据,每个位(bit)对应一行记录的状态(0表示不存在,1表示存在)。如果记录不重复且记录数满配,这个位图结构最大存储空间是512MB。针对位图的判重效率就非常高。

Bitmap 结构下在海量数据(40亿+)的前提下,即使有大量数据重复也不会增加存储空间和降低判重效率。位图支持与运算(求交集)、或运算(求并集)。但是如果记录数不多且重复值很高的情况下(学术界称之为稀疏矩阵),Bitmap 存储就有点浪费内存空间(固定 512MB)。于是学术界有提出稀疏位图(或叫压缩位图)概念,Roaring Bitmap 就是稀疏位图的实现方案中目前认为最好的方案,并且已经被多个数据库产品支持。比如说 PostgreSQL 、AnalyticDB、PolarDB、Doris、ClickHouse、OceanBase (列举的不一定全) 。

Roaring Bitmap 原理简介

32 位地址空间容量下的数据值如果全用 Bitmap 存储,碰到稀疏矩阵数据,为 0 的位会很多,很浪费存储空间。RoaringBitmap 对这个 32 位使用做了一些改进,分为高 16 位和低 16 位。高 16 位做为记录的索引 KEY,低 16 位作为记录的值 VALUE。所以高 16 位有多少不同的记录,就有多少个KEY,最多记录数 216个。有的文章也把每个记录称之位一个 HASH Bucket(桶),每个 Bucket 的大小就是低 16 位存储的记录数。

低 16 位的数据结构分为三类。如果记录数少于 4096 个,就使用 16 位的 Short Int 稀疏数组。名为数组,实际上是链表结构,以节省空间。如果记录数超过 4096 个,就开始使用 16 位的 Bitmap 存储。如果碰到连续的数据,则使用 Run Length Coding(简称 RLE)存储一个开始和结束的整型值。

1730177610

Roaring Bitmap (后简称 rb)也支持两个 rb 集合求并集、交集、差集、计算基数、排序等。这些操作是 SQL 运算逻辑的基础。

OceanBase RoaringBitmap 类型和函数

OB 4.3.2 开始支持数据类型 roaringbitmap,以及相关函数。函数列表如下:

函数类型函数名称函数作用
位图构造函数rb_build_empty构建一个空的位图数据。值为0x0100
rb_build_varbinaryVarbinary 为 OceanBase 私有格式,是由 version 信息、type 信息、data 等部分组成的二进制格式。
rb_from_string通过特定格式的字符串来构建位图数据。字符串格式为需要构建的位图数据的每一个元素,并通过逗号隔开,如 1,2,3,4。
位图基数计算函数rb_cardinality返回输入位图数据的基数。
rb_and_cardinality rb_or_cardinality rb_andnot_cardinality返回两个位图数据做与计算后,得到的新位图数据的基数。
rb_and_null2empty_cardinality rb_or_null2empty_cardinality rb_andnot_null2empty_cardinality返回两个位图数据做与计算后,得到的新位图数据的基数。
rb_xor_cardinality返回两个位图数据做与计算后,得到的新位图数据的基数。
位图运算函数rb_and rb_and_null2empty计算两个位图数据的交集。
rb_or rb_or_null2empty计算两个位图数据的并集。
rb_xor提供两个位图数据的异或运算。
rb_andnot rb_andnot_null2empty提供两个位图数据的与非运算。
位图判断函数rb_is_empty判断输入的位图数据是否为空。
位图输出函数rb_to_varbinary用于以 varbinary 的形式输出位图数据。
rb_to_string以字符串的形式依次输出位图数据的每一个元素,并以逗号隔开。其中元素的输出格式为 UINT64,输出的最大元素个数为 1000000。
位图聚合函数rb_build_agg将数值列聚合为位图数据。
rb_or_agg将位图列的多行数据进行或运算,并聚合为位图数据。
rb_and_agg将位图列的多行数据进行与运算,并聚合为位图数据。

OB Roaring Bitmap 示例

下面以用户行为分析在 OB 的例子来演示这一功能。

首先构造基础数据 用户标签表。

-- 用户属性表:共有100万个用户,每个用户有64个属性 --
create table t_user_tag (  
uid int8,   
tag int,        
mod_time timestamp,    
primary key (tag,uid)  
); DELIMITER //CREATE PROCEDURE insert_user_tag(IN min_uid BIGINT, IN max_uid BIGINT)
BEGINDECLARE uid BIGINT UNSIGNED;SET uid = min_uid;WHILE uid <= max_uid DO-- Loop to generate 64 random tags for each userINSERT IGNORE INTO t_user_tagSELECT uid, mod( rand(unix_timestamp())*1000000,1999), current_timestamp() from table(generator(64));  SET uid = uid + 1; -- Move to the next UIDEND WHILE;
END //DELIMITER ;call insert_user_tag(1,250000);
call insert_user_tag(250001,500000);
call insert_user_tag(500001,750000);
call insert_user_tag(750001,1000000);

然后生成标签和用户对应索引表,使用 roaringbitmap 类型。

create table t_tag_userbit (  tag int primary key,            userbit roaringbitmap,mod_time timestamp
);  insert /*+ enable_parallel_dml parallel(3) */ into t_tag_userbit 
select tag,rb_build_agg(uid),current_timestamp() from t_user_tag group by tag order by tag;

抽查几笔数据看看 roaringbitmap 类型的数据特征。

select * from t_tag_userbit where tag in (1,11,111,1111);

1730177638

这里看到的是 dbeaver 工具格式化后的结果,实际 rb 列是二进制数据。

1730177648

如果是在命令行 mysqlobclient下,默认这个数据展示可能是乱码,可以在命令行下加一个参数 --binary-as-hex ,使用十六进制展示 binary 类型数据。

obclient -h127.1 -P2881  -uroot@obmysql -p test --binary-as-hex

下面是一些 roaringbitmap 类型相关的函数演示。

比如格式化显示和查看基数。

select tag, rb_to_string(userbit),rb_cardinality(userbit), mod_time 
from t_tag_userbit where tag in (1382, 1406,10257);

1730177665

计算同时满足两个tag标签场景的的用户数。

select rb_cardinality(rb_and_agg(userbit)) from t_tag_userbit  where tag in (1990,1998) ;

更新标签用户索引表。

update t_tag_userbit set userbit = rb_or(userbit, rb_from_string('61,71,73,74,85')) where tag = 1998;

看一下 SQL 执行计划。

obclient [test]> explain select rb_cardinality(rb_and_agg(userbit)) from t_tag_userbit  where tag in (1002,1990,1998) ;
+-----------------------------------------------------------------------------------------------------+
| Query Plan                                                                                          |
+-----------------------------------------------------------------------------------------------------+
| ========================================================                                            |
| |ID|OPERATOR       |NAME         |EST.ROWS|EST.TIME(us)|                                            |
| --------------------------------------------------------                                            |
| |0 |SCALAR GROUP BY|             |1       |14          |                                            |
| |1 |└─TABLE GET    |t_tag_userbit|3       |14          |                                            |
| ========================================================                                            |
| Outputs & filters:                                                                                  |
| -------------------------------------                                                               |
|   0 - output([rb_cardinality(T_FUN_SYS_RB_AND_AGG(t_tag_userbit.userbit))]), filter(nil), rowset=16 |
|       group(nil), agg_func([T_FUN_SYS_RB_AND_AGG(t_tag_userbit.userbit)])                           |
|   1 - output([t_tag_userbit.userbit]), filter(nil), rowset=16                                       |
|       access([t_tag_userbit.userbit]), partitions(p0)                                               |
|       is_index_back=false, is_global_index=false,                                                   |
|       range_key([t_tag_userbit.tag]), range[1002 ; 1002], [1990 ; 1990], [1998 ; 1998],             |
|       range_cond([t_tag_userbit.tag IN (1002, 1990, 1998)])                                         |
+-----------------------------------------------------------------------------------------------------+
15 rows in set (0.041 sec)

从执行计划看 SQL 引擎有跟 RB 有关的算子 :T_FUN_SYS_RB_AND_AGG 。

更多阅读

OB 有了 roaringbitmap 类型,就也可以像 ClickHouse 一样可以用于类似海量数据用户标签画像等业务场景。


OceanBase  V4.3 现已支持 365天 免费试用,点击立即开启 >> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

W25Qxx

概述 FLASH FLASH是一种是非易失性存储器&#xff0c;即掉电后不会丢失数据&#xff0c;这和RAM&#xff08;随机存储器&#xff09;不同。 FLASH比起同作用的EEPROM有价格低的优点 FLASH的擦除操作是以扇区为单位的&#xff08;比起EEPROM来说操作较为不方便&#xff09; 芯片…

网络不可达

导致此问题原因较多&#xff0c;我只针对一种情况进行讨论&#xff0c;如果和文中症状不同&#xff0c;另寻他处&#xff0c;或者死马当活马医&#xff08;&#xff1f;&#xff09; 如需转载&#xff0c;标记出处 症状&#xff1a; 1.ping命令网络不可达 2.ifconfig中网卡en…

【AI News | 20250322】每日AI进展

AI Repos 1、DeTikZify 可以把草图或图形转换成TikZ代码的模型&#xff0c;可用来绘制复杂的科学图表&#xff0c;输入草图或文字描述即可转换成TikZ代码。DeTikZify强大的地方在于它能理解图表的语义信息&#xff0c; 能识别图表中的不同组成部分及其含义&#xff0c;比如坐标…

Debian12生产环境配置笔记

在 Debian 12 上进行生产环境配置的详细步骤&#xff0c;涵盖软件更新、基础软件安装、Docker 及 Redis 部署&#xff0c;以及 Nginx 配置多个虚拟主机等内容。所有命令均以 root 用户身份执行&#xff0c;无需添加 sudo 1. 更新软件 首先&#xff0c;确保系统上的所有软件包…

UE AI 模型自动生成导入场景中

打开小马的weix 关注下 搜索“技术链” 回复《《动画》》 快速推送&#xff1b; 拿到就能用轻松解决&#xff01;帮忙点个关注吧&#xff01;

【最后203篇系列】022 用Deepseek14b提取新闻事件

这算是之前一直想做的一件事&#xff0c;趁周末赶快做了。 业务意义&#xff1a;现实中有大量的舆情&#xff0c;这对我们的决策会有比较重要的作用 技术依赖&#xff1a; 1 模型基础能力2 消息队列3 异步获取消息4 时间序列库 1 模型基础能力 大模型发展到现在&#xff0…

Cursor的五种高级用法

文章目录 代码编写写作编辑自动生成工作流搞定开源项目数据处理参考 代码编写 Cursor 最基本的功能是帮助你编写代码。只需使用 Composer&#xff08;CtrlI&#xff09;&#xff0c;描述你想要实现的功能&#xff0c;Cursor 就能生成相应的代码。不满意&#xff1f;直接告诉它…

LeetCode hot 100 每日一题(13)——73. 矩阵置零

这是一道难度为中等的题目&#xff0c;让我们来看看题目描述&#xff1a; 给定一个 _m_ x _n_ 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 提示&#xff1a; m matrix.lengthn matrix[0].length1 < m, n …

Java基础编程练习第34题-正则表达式

在Java里&#xff0c;正则表达式是一种强大的文本处理工具&#xff0c;它可以用于字符串的搜索、替换、分割和校验等操作。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。Java通过java.util.regex包提供了对正则表达式的支持。 以下是正则表达式在Jav…

基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关

此方案充分挖掘eFish-SBC-RK3576的硬件潜力&#xff0c;可快速复制到智慧园区、交通枢纽等场景。 方案亮点 ‌接口高密度‌&#xff1a;单板集成5GWiFi多路工业接口&#xff0c;减少扩展复杂度。‌AIoT融合‌&#xff1a;边缘端完成传感器数据聚合与AI推理&#xff0c;降低云端…

redis解决缓存穿透/击穿/雪崩

文章目录 1.缓存穿透1.1 概念1.2 解决方案1.2.1 缓存空对象1.2.2 布隆过滤 1.2 店铺查询使用缓存穿透解决方案1.2.1 流程 2.缓存雪崩2.1 什么是缓存雪崩&#xff1f;2.2 雪崩解决方案 3.缓存击穿3.1 什么是缓存击穿&#xff1f;3.2解决方案3.2.1 基于互斥锁解决缓存击穿问题&am…

第十六届蓝桥杯康复训练--6

题目链接&#xff1a;790. 数的三次方根 - AcWing题库 思路&#xff1a;二分&#xff0c;注意正负号和小数判断退出的方法&#xff08;虽然正负无所谓&#xff09; 代码&#xff1a; #include<bits/stdc.h> using namespace std;#define exs 0.00000018812716007232667…

【AVRCP】深度剖析 AVRCP 中 Generic Access Profile 的要求与应用

目录 一、GAP基础架构与核心要求 1.1 GAP在蓝牙体系中的定位 1.2 核心模式定义 二、AVRCP对GAP的增强要求 2.1 模式扩展规范 2.2 空闲模式过程支持 三、安全机制实现细节 3.1 认证与加密流程 3.2 安全模式要求 四、设备发现与连接建立 4.1 发现过程状态机 4.2 连接…

DeepSeek和Kimi在Neo4j中的表现

以下是2个最近爆火的人工智能工具&#xff0c; DeepSeek:DeepSeek Kimi: Kimi - 会推理解析&#xff0c;能深度思考的AI助手 1、提示词&#xff1a; 你能帮我生成一个知识图谱吗&#xff0c;等一下我会给你一篇文章&#xff0c;帮我从内容中提取关键要素&#xff0c;然后以N…

相机光学中一些疑难问题的解释

工业机器视觉系统广泛应用于自动化生产、质量控制、物体检测等领域&#xff0c;而光学原理和镜头选择是确保其精准度和高效性的关键因素。 1. 为什么镜头的最大光圈处通常成像不佳&#xff1f; 在许多摄影场景中&#xff0c;最大光圈&#xff08;例如F1.2、F1.8&#xff09;是…

蓝桥杯高频考点——并查集(心血之作)

并查集 TA Can Do What & why learningwhatwhy 原理和结构路径压缩例题讲解题解solution 1&#xff08;50分&#xff09;solution 2&#xff08;100分&#xff09; 按秩(树高)合并按大小合并 TA Can Do What & why learning what 并查集主要是解决连通块的问题&#x…

简单实用!百度AI + Raphael AI = 免费生图

简单实用&#xff01;百度AI Raphael AI 免费生图 -- ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b55eda9141d34697b05db0cd60f62b75.png#pic_center) 第一步&#xff1a;下载或截取一些好看的图片当参考图片 第二步&#xff1a;用百度AI描述你想要的图片&…

React中组件通讯与插槽

一、为DOM组件设置Props 1.用JSX语法对标签的类名进行设置属性名是className&#xff1b; 2.用JSX语法对标签的样式进行设置要使用键值对进行设置&#xff0c;带“-”时用小驼峰方法来书写&#xff1b; 3.当一个标签的属性过多时&#xff0c;可以通过JSX语法进行展开设置&am…

自定义reset50模型转换到昇腾om

目录 原始转换脚本 脚本运行报错 基于reset50 模型的自定义网络 基本网络结构 卷积模块定义示例 Bottleneck定义示例 网络定义示例 改进的转换脚本 脚本运行报错channels不匹配 脚本运行报错维度不匹配 模型输入数据的类型 tensor size NCHW和NHWC 自定义网络的通…

vue3:十一、主页面布局(进入指定菜单页面,默认锁定到左侧菜单)

一、效果 直接进入home页面&#xff0c;直接展开对应的菜单项 二、具体实现 1、菜单容器增加默认选中变量 在菜单容器中将默认展开菜单default-openeds修改为默认选中菜单default-active 2、引入useRoute方法 引入该方法为了获取当前页面的路径 import { useRoute } from …