Argodb事务操作探索

本文介绍了ArgoDB的写操作机制,尤其是如何通过base和delta文件管理数据更新和删除。重点讲解了避免频繁小数据写入导致的问题,以及提供了一系列性能优化建议,如批量处理DML操作,优化SQL语句结构等。

Argodb所有的写操作都会在底层写入一个新的文件,而不是写入已有文件中。
举例:insert操作生成base文件,
1)update/delete操作生成delta文件,删除表中数据时,并不会直接删除数据文件。而是新增一条带有“delete”标记的记录,记录是和原记录存在放相同目录下;当读取数据时,通过“delete”标记识别记录已被删。更新操作可能是插入一条到base文件,再插入一条带有“delete”标记的记录到delta文件。Compact Service 会定期进行合并小文件,这时候才会真正的从磁盘中删除记录

2)当进行频繁的小数据量的写入操作,会导致出现大量的base/delta文件,并且内容很少(KB级别)
小文件过多可能导致如下问题:
1.IO开销大,影响性能
2.shiva tserver启动慢,内存占用高,甚至崩溃
3.argodb server 内存占用过高
ArgoDB的compact操作的主要目的是为了减少小文件数量,但是跨分区不能compact。

对开发者来说,主要避免像TP库一样高频的做单条数据插入,这样会导致短时间内大量小文件。官方在5.2.2的文档建议是:

DML
  • 避免一次更新或删除大批量数据(例如大于 50,000 条),可分批执行。

  • 单条语句仅更新一个表,避免更新多个表。

  • INSERT 语句需指定具体的字段。

  • INSERT/DELETE 语句的优化规则为操作粒度小(不超过 100 条),具有明确的 WHERE 条件。

  • INSERT 语句使用 BATCH 提交时(例如 INSERT INTO table_name VALUES(),(),()… ),应控制 VALUE 数量。

  • SQL 语句在程序中传入的参数值类型和数据库中该字段的类型相同,避免发生隐式类型转换。

  • DQL
  • 在使用 SELECT 语句时,指定要查询的字段,避免使用 SELECT *,降低网络传输和存储 I/O 消耗的时间。

  • 通过客户端(如 JDBC)操作数据库时,使用 prepared statement 避免 SQL 注入并提升性能。

  • 避免或减少在核心业务的 SQL 语句中使用复杂查询,便于业务理解,同时充分利用多核 CPU 提升性能。

  • 无去重需求时,优先使用 UNION ALL 来代替 UNION,提升查询效率。

  • 使用 COUNT(*) 来代替 COUNT(列名),避免漏统计列为 NULL 值的行。

  • 包含 DISTINCT、ORDER BY、GROUP BY 子句的查询,将中间结果集控制在 10000 行以内,

  • 避免使用读锁,以免事务过大引发锁等待,从而影响业务。

  • 避免跨数据库的 JOIN 操作,从而降低数据库间的耦合。

  • 减少或避免排序,提升 SQL 执行效率。

  • 减少或避免使用 IN 操作,可改写为 JOIN 操作。

ArgoDB 是星环科技推出的一款分布式分析型数据库,专为大规模数据处理和分析设计。它支持多种数据模型,包括关系型数据、图数据、时序数据等,适用于复杂的分析场景。通过其灵活的架构和强大的性能,ArgoDB 能够满足企业级大数据处理的需求 [^1]。 ### 主要特性 - **事务支持**:ArgoDB 支持 ACID 事务,确保数据的一致性和可靠性。所有的写操作都会在底层生成新的文件,而不是修改已有文件。例如,`INSERT` 操作生成 `base` 文件,而 `UPDATE` 或 `DELETE` 操作则生成 `delta` 文件。删除数据时,不会直接删除数据文件,而是新增一条带有“delete”标记的记录,标记与原记录存储在相同的目录下。读取数据时,系统通过识别“delete”标记来判断记录是否已被删除。更新操作可能涉及插入一条新记录到 `base` 文件,并在 `delta` 文件中插入一条带有“delete”标记的记录。定期的 `Compact Service` 会合并小文件,并在合并过程中真正从磁盘中删除无效记录 。 - **分区管理**:在 6.0 及后续版本中,ArgoDB 引入了归档分区的功能。用户可以跨分区进行合并操作,将大量小文件合并成较大的文件,从而减少存储开销、元数据管理的开销以及处理时的任务调度开销。用户可以通过创建归档分区表来使用这一功能 [^2]。 - **小文件合并**:ArgoDB 提供了对小文件进行合并的功能,用户可以在业务低峰期执行命令来合并指定表的小文件。支持的合并类型包括: - `full`:将 `base` 文件合并成一个 `base` 文件,并删除无用的 `delta` 文件。 - `major`:将 `base` 及其 `delta` 文件合并,生成一个新的 `base` 文件。 - `minor`:将 `base` 的 `delta` 文件合并,生成一个新的 `delta` 文件。 示例命令如下: ```sql ALTER TABLE demodb.customer COMPACT "full"; ``` 此命令会对 `demodb` 数据库中的 `customer` 表执行 `FULL COMPACT` 操作 [^3]。 - **连接方式**:用户可以通过 Beeline 命令行工具连接到 ArgoDB 数据库。登录到 Transwarp Manager 平台后,用户可以在集群页面的 Transwarp ArgoDB 区域找到 Quark 服务的配置标签,并搜索参数 `hive.server2.authentication` 来开启 LDAP 认证(轻量级目录访问协议) [^4]。 ### 适用场景 ArgoDB 适用于需要处理海量数据并进行复杂分析的企业级应用。其支持的多模型数据处理能力使其能够应对多种业务需求,包括但不限于实时数据分析、历史数据归档、数据仓库建设等。 ### 总结 ArgoDB 是一款功能强大的分布式分析型数据库,具备事务支持、分区管理、小文件合并以及多种连接方式等特性。它能够为企业提供高效、可靠的大数据处理解决方案,适用于多种复杂的数据分析场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值