分布式存储入库过程本质上是建索引过程

不论对于什么数据库,druid es mysql hbase,凡是能实现秒级查询的数据库,无一不是借助将索引全部存入内存来加快索引。

所以入库的过程本质上就是建索引的过程,这个建索引过程就是有master节点发起的一个mapred任务。

索引只有两种:位图索引(druid hbase),倒排索引(es)

 

当开始调用java scala版本的插入数据,或者flink sink中的插入数据,本质上就是为单条数据生成索引,并写入数据的过程。

所以生成索引和写入数据的过程是最重要的,涉及到整个分布式存储的架构,实际上写入数据过程就是一个mapred过程。

至于查询很简单,就是根据过滤条件到位图索引中检索。

查索引只是高性能的表现,本质上是因为建索引机制的高效完善。

 

凡所有的数据库或者分布式存储,学习过程中问自己四个问题

1.数据是如何写的,包括api函数和写数据过程。写数据本质上是由master发起一个mapred任务。

2.数据是如何读的,包括api函数和读数据过程。读的原理简单,但api一般较多。

3.为啥读快,索引原理

4.为啥写快,日志结构合并树(druid hbase)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的存储过程,用于处理入库制单到入库审核再到材料入库的事务处理: ```sql CREATE PROCEDURE process_inventory ( IN order_id INT, IN material_id INT, IN quantity INT ) BEGIN DECLARE order_status INT; DECLARE audit_status INT; START TRANSACTION; -- 检查订单状态是否为待审核 SELECT status INTO order_status FROM orders WHERE id = order_id; IF order_status <> 0 THEN ROLLBACK; SELECT '订单状态不正确' AS error_message; RETURN; END IF; -- 检查审核状态是否为待审核 SELECT status INTO audit_status FROM audits WHERE order_id = order_id; IF audit_status <> 0 THEN ROLLBACK; SELECT '审核状态不正确' AS error_message; RETURN; END IF; -- 更新订单状态为已审核 UPDATE orders SET status = 1 WHERE id = order_id; -- 更新审核状态为已审核 UPDATE audits SET status = 1 WHERE order_id = order_id; -- 增加库存 UPDATE inventory SET quantity = quantity + quantity WHERE material_id = material_id; COMMIT; SELECT '入库成功' AS message; END; ``` 以上存储过程接受三个参数:订单ID,材料ID和数量。首先,它会检查订单状态是否为待审核,如果不是,则回滚事务并返回错误消息。接下来,它会检查审核状态是否为待审核,如果不是,则回滚事务并返回错误消息。然后,它会将订单状态和审核状态更新为已审核,并将库存增加所需数量。最后,它会提交事务并返回成功消息。 请注意,这只是一个简单的示例。实际应用中,您可能需要更复杂的逻辑来处理各种情况。此外,还要确保正确设置数据库表结构和外键约束,以确保数据的完整性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值