有哪些好的做兼职的网站有哪些,亚马逊购物网站,安徽网站备案要多少时间,免费建设网站软件下载作者介绍#xff1a;肖赞#xff0c;贝壳找房#xff08;北京#xff09;科技有限公司 OLAP 平台负责人#xff0c;基础研发线大数据平台部架构师。
贝壳找房是中国最大的居住服务平台。作为居住产业数字化服务平台#xff0c;贝壳致力于推进居住服务的产业数字化、智能…
作者介绍肖赞贝壳找房北京科技有限公司 OLAP 平台负责人基础研发线大数据平台部架构师。
贝壳找房是中国最大的居住服务平台。作为居住产业数字化服务平台贝壳致力于推进居住服务的产业数字化、智能化进程通过聚合、助力优质服务者为中国家庭提供包括二手房交易、新房交易、租赁、家装、家居、家服等一站式、高品质、高效率服务。 前几天我们在《贝壳降本提效实践基于 OceanBase 的实时字典服务》中介绍了实时字典服务的应用场景在上线 OceanBase 后贝壳获得了更高的查询性能和稳定性。今天为大家介绍 OceanBase 在贝壳的第二个应用场景——实时维表服务通过替代原有的 HBase 维表服务让贝壳的性能提升了 3-4 倍硬件成本节省了一半与此同时运维成本获得了极大降低。 在典型的实时数仓或实时业务场景里Flink 实时流处理过程中经常需要将事实表与外部维度表进行关联查询维度表补全事实表中的信息。例如在贝壳家居等业务场景中需要在用户下单后将订单信息与维度表中商品信息的相关信息进行实时关联。考虑到维表数据量较大并且 Flink 实时查询 QPS 较高传统数据库 MySQL 等难以支撑因此贝壳采用 HBase 作为维表。HBase 是一个分布式列存储 NoSQL 数据库具有较好地查询性能但是也存在一些痛点。 痛点 1HBase 不支持二级索引 在许多应用场景中Flink 任务关联维度表时除了需要基于主键字段进行关联外还需要其他非主键字段进行关联。但是HBase 只支持行键Row Key作为单一索引本身并不直接支持二级索引。Apache Phoenix 等项目对 HBase 的基础上进行扩展能够实现类似于二级索引的功能但是需要更多的开发和维护成本。 痛点 2HBase 依赖较多部署复杂成本高 HBase 是构建在 Hadoop 生态系统之上的它依赖于分布式文件系统 HDFS 用于数据的持久化存储依赖 ZooKeeper 来完成选举、节点管理、集群元数据维护等因此在生产环境中部署 HBase 之前需要先部署和配置 Hadoop、ZooKeeper 等组件涉及组件多部署较复杂运维成本较高硬件成本也较高特别是在一些特殊场景下需要分别为其部署独立的 HBase 集群。 基于上述背景贝壳将目光投向分布式数据库并锁定具备高性能、高可靠性和可扩展性的 OceanBase。同时OceanBase 能够很好地解决贝壳业务痛点。 首先OceanBase 原生支持二级索引功能可以直接在维表上创建额外的索引提升维表的查询性能。其次OceanBase 只有 OBServer 一个角色不依赖任何外部组件天然具备高可用能力部署非常简单。同时其自带的周边工具也可以快速安装比如通过 OCPOceanBase Cloud Platform白屏化安装或通过 OBDOceanBase Deployer命令行安装集群运维很方便。 在部署资源消耗方面HBase 方案机器成本大概是 OceanBase 的 2 倍。因为 HBase 为了保证高可用, 采用了双 HRegionServer而 HBase 又是基于三副本的 Hadoop 存储数据, 所以一份数据通常需要六副本。在集群规模不大时使用 Zookeeper、Hadoop 会带来大量额外的机器冗余。但是使用 OceanBase 存储数据只需要三副本成本降低一半。 因此贝壳决定在实时计算平台中引入 OceanBase 作为实时维表存储在此之前对 OceanBase 和 HBase 在实时维表 1 对 N 关联和维表 1 对 N 关联场景进行了全面的性能测试对比。 第一环境准备 OceanBase 和 HBase 测试集群均采用 3 台 Dell EMC PowerEdge R740 服务器节点组成节点配置规格为80C/188G/2.9T Nvme SSD所有的测试任务均运行在同一个 Hadoop 实时集群。HBase 版本为 1.4.9HBase 集群由 HBase DBA 协助部署和配置OceanBase 版本为 3.1.2使用默认配置。 第二测试方案 首先为验证维表数据量对于查询性能影响分别准备了 1 亿、2000 万、10 万的随机测试数据插入 OceanBase 及 HBase其中主键(HBase为 rowKey)为从 1 至测试数据量的顺序值OceanBase 建表 DDL 及样例数据如下: show create table tb_dim_benchmark_range_partitioned;create table tb_dim_benchmark_range_partitioned t1 bigint(20) NOT NULL,t2 varchar(200) DEFAULT NULL, ……t30 varchar(200) DEFAULT NULL, PRIMARY KEY (t1)) DEFAULT CHARSET utf8mb4 ROW_FORMAT COMPACT COMPRESSION zstd_1.3.8 REPLICA_NUM 3 BLOCK_SIZE 16384 USE_BLOOM_FILTER FALSE TABLET_SIZE 134217728 PCTFREE 0 partition by range(t1)(partition PT1 values less than (10000000),partition PT2 values less than (20000000),partition PT3 values less than (30000000),partition PT4 values less than (40000000),partition PT5 values less than (50000000),partition PT6 values less than (60000000),partition PT7 values less than (70000000),partition PT8 values less than (80000000),partition PT9 values less than (90000000),partition PT10 values less than (100000000));
select * from tb_dim_benchmark_range_partitioned limit 1;# 10000000,c5181f1335efd950960f41cbecb1ab0ed97c43502252b99834f4b6905ea7f7490ca72e1d676bbe9b77016d23e52ada249f2c,2b5480769a360133d57f09cba16d1c449cc06b42b614bcfa3f9db6bbf7a04bac2be1d373d11c63a77676daf53111c2321b32,db88f926925d87175aa4be6740f6f2f49d8f8b38f0d0efff2e5e832f3c1aec21e06cc4f2f0b5053e0b9fbab8a16cce80b9ff,9c0b94cdde25b68264704c890d141444d28544a7ce4955856b3115f913442ec4bc741f033477e366005c927e41842a7cd9be,4d69eedaae9e42b4ab7388e66992efddfa39cbb6802cf69b97c5892070a68e6eed51f823770587771a49cbbd1b7be1f2e024,c60b30f6c4e1b3c02d6fb2de58badf8097f782a8534e0c9dc78497ede12b2573e2d9441e0596f37739d26f0830918fb03ff5,a8a01cbe3bd44e6d52b7e83bd020a23ae305713fd376a0627f610302018c39ec3aa540519dccceb764324282dfbf0bdda6cc,fd358773a94c1770980e92e66fcd9e4f70d6f3ef35dff86c65a97826698c750489682c2d1d36ab75ddb588da65b61cd6fc63,cb8a60222389c9ff9ff4e4e492a4f16ed7ea0e6b781379afc7fad78539fbf8da54b0ef8ea7ef9680543ebc0c18a908092bd1,9cdbf58a3d454d2b14ebf17167d045887ab5eb3a21d3916acc393475011a079c350295fa8b4b324dab63a00f1fbadfb22edb,cda510824ef5bc82cd4e014c851ed367dbd6da8828cc261070a0db9cc9341764baf445506a12a7eb7265434f29d63c65b3a1,8d7c4bbcd42364b93b8cae11eff8f50115e36f1f4f4e6a492687bc2374444c4eaf80e1903eb13fcdfbea6f00de999e0f0587,107b23e4b7e5a16149a8ea7f75c45c607bb5974cbbdf36077615d92591f4830ec5b2b33945d82e8e526f92cb0072cbf8a260,cda4ab39b6f2b67d1d283077a1beb01771639eff1ae371372bb2555de594699821d43509fdd7014bcf3e5098bd13c30c8199,a330f59ee2e48051362241f9a24ba1adad4b61fdd18676cd209799bbec6775dc01120abb0e157589d3f594051b5ae2dd6572,b8e98c3979610c67ea65433a560ab6cf8663c9de201ae1051a14034b317f90aaa1085b49eba3d86748677f4e0575169fb76c,6753542147a9cf38f4d040f205483a798d1d2a2c0cf2283ec98c735bf82422a8ecdea432cee8c76a00917b8add7eac5aa0b4,8d8e0c2caeed82f21ddb288affe2fb567c008e8982cb5a4d07343dc4fd6679f550856649fe4bd40eec9747485c660b01e55e,,c261014cf13c462815e0afece1512409d2549a699e33eaf8cb23b0b23719c870c83817fcaa7466d5d88a1ae240458ba0201a,2ac55e6bc39eb79694bf00c2b69768365b7833d9f0cb7df078525d9ab98eba5ce2bfc3cc1fb9f4398c49c16073fb5d863172,77ab6010d7bc664b6861927322276b2d35d4f5ff2d6bc2eec3da9ef936ae836dfbed6783a8c7f9970e19d46e43b52e49a0f6,4109f993c94f8ca40c6932d01a726fb173beb60e34b57bf488f86fe9e6c12f7f7497c720fa95099c6a43cb3442444b367ea4,7891bdf8a52dc19d311f392fa5f34509c6dcb33b8b8e291131ca5d46c517ea0933868874244aff1b3345ea5279fe0c659709,200e69e8ec8e6104834596c2fefe8ed772ba9b7de4f1287c91c3b91469dd985fbb93d55a9497b2606ae9003975458b6b054b,a2de28933b2cf1f9166cf3aab732f5c6b68967eddef0472a8577a82f37e77bcfc45a5e0adc11d382160d3c84ec14e0e75b5d,1fa6bcf4d9ef2076aa016e78db575595a9155dfe6484a9812ae690fc20c244bf2d09355ba7dbc32495330a21b6e3c893ba6b,b01a0b4ba3d8ae159d330720bb8baffe3ad2504b221151b8f68304ed7c14a03d21f75a4e6ad16873ea0c8904717478d3f7c4,a00ae3e9a8c89f5a0f0fae92934d23adeb9117ef7c91f80f0d5306eca558b77422f273283e867a6b7320e91895087e652ed7 其次为避免测试流程中其他依赖组件(例如物理 Source、Sink)对维表关联性能造成影响对 SQL 的测试数据源使用 DataGen SQL Connector (支持在内存中随机或顺序 生成记录)及 BlackHole SQL Connector(吞掉所有输入数据用于性能测试)。
CREATE TABLE data_gen_source (t1 BIGINT, t2 VARCHAR, proctime AS PROCTIME()) WITH ( connector datagen, fields.t1.kind random, fields.t1.min 1, fields.t1.max 100000, rows-per-second 100000000);CREATE TABLE tb_dim_benchmark_1(t1 BIGINT,t2 VARCHAR,……t30 VARCHAR,PRIMARY KEY (t1) NOT ENFORCED) WITH ( connector jdbc, url , driver com.mysql.jdbc.Driver, sink.buffer-flush.max-rows 500, table-name tb_dim_benchmark_range_partitioned_10w); CREATE TABLE blackhole_table ( t1 BIGINT, t2 VARCHAR, ……t30 VARCHAR) WITH (connector blackhole);
INSERT INTO blackhole_tableSELECT tb1.t1,tb2.t2,tb2.t3,tb2.t4,tb2.t5,tb2.t6,tb2.t7,tb2.t8,tb2.t9,tb2.t10,tb2.t11,tb2.t12,tb2.t13,tb2.t14,tb2.t15,tb2.t16,tb2.t17,tb2.t18,tb2.t19,tb2.t21,tb2.t22,tb2.t23,tb2.t24,tb2.t25,tb2.t26,tb2.t27,tb2.t28,tb2.t29,tb2.t30FROM data_gen_source tb1 LEFT JOIN tb_dim_benchmark_1 FOR SYSTEM_TIME as of tb1.proctime as tb2 ON tb1.t1 tb2.t1; 第三测试结果 维表 1 对 1 关联即 DataGen 生成随机值与 OceanBase(索引字段)和HBase(RowKey)关联测试数据如下表所示。 维表 1 对 N 关联即 DataGen 生成随机值与 OceanBase(二级索引列)关联 测试那颗数据如下表所示。 基于测试结果可以得到四个结论 维表数据量在 2000 万及 1 亿条大数据量时低任务并行度下的 OceanBase QPS 优于 HBase高任务并行度下 OceanBase 相比 HBase 有 3-4 倍性能提升优势明显。 维表数据量在 10w小数据量时低任务并行度下 HBase QPS 略高于 OceanBase高并行度下 OceanBase 优势明显。 对 OceanBase 使用非索引列关联性能较差后续使用需注意大维表关联时关联字段加索引实时计算平台可从平台功能角度优化例如用户关联了非索引列则在 SQL 校验阶段提示用户创建索引。 对 OceanBase 使用二级索引列关联1 对 N 关联性能良好可满足较高 QPS 业务场景需求。 从以上测试结果来看在相同环境下OceanBase 综合性能要优于 HBase并且原生支持二级索引能力部署简单具有更低的硬件成本和运维成本因此贝壳选择使用 OceanBase 替换 HBase作为实时计算平台的实时维表存储。 在 OceanBase 的应用过程中贝壳也提出了一些建议比如发现普通的关系表不支持 TTL当前使用的是 OceanBase 3.1.2 社区版本经与社区沟通OceanBase 的 3.1.4 版本已经支持 table API 或 Hbase API 等 API 模型OceanBase 4.0 版本已经支持全局二级索引。 另外贝壳建议 OceanBase 在与大数据生态打通例如导入导出、计算等方面可以进一步加强更好地支持大数据到 OceanBase 的导入导出等。