read#
通过主键或查找条件读取单条记录。
Rust API#
// sync_api
pub fn mudu_get(session_id: OID, key: &[u8]) -> RS<Option<Vec<u8>>> {
/* ... */
}
// async_api
pub async fn mudu_get(session_id: OID, key: &[u8]) -> RS<Option<Vec<u8>>> {
/* ... */
}
概念签名#
read(table: string, key: KeyExpr, options?: { projection?: [string], for_update?: bool }) -> Row | null
参数#
table—— 目标表或逻辑集合名称。key—— 主键值或用于查找的结构化键表达式。options.projection—— 可选的列名列表,用于指定返回的列。options.for_update—— 为 true 时,读取会获取锁,以允许在同一事务内安全地进行后续更新。
行为#
在表或索引中执行点查找,返回匹配的行;如果未找到则返回 null。
读取遵守当前事务的隔离和可见性规则(根据隔离级别可能返回已提交快照值)。
返回值#
包含列值的单个
Row对象;如果没有匹配行则返回null。
错误#
NotFound:不是错误;未匹配时read返回null。LockConflict:请求for_update且锁获取失败时返回。
事务语义#
在打开的事务内进行的读取受该事务的快照/隔离影响。
事务外的读取遵循宿主默认语义。
示例#
let row = mudu_get(oid, b"accounts:42")?;
if let Some(bytes) = row {
// 按表模式解码 bytes
}
备注#
使用 projection 可以减少数据传输并提高性能。
对于读-改-写模式,优先使用
for_update以避免丢失更新竞争。