kevy
本页内容

kevy 不做什么

一个产品的形状,由它拒绝的东西定义的程度不亚于它提供的东西。这一页把 kevy 的拒绝集中在一处,好让"它能不能做 X"这个问题在你据此动工之前就有 答案。每条都写清为什么,以及那个需求该由什么来满足。

这里的拒绝是持久的。它们不是"还没做"——它们是设计据以成立的线,改动 其中一条是重新设计,不是加一个功能。

四条线

1. Redis 契约不归我们改。kevy 用 Redis 命令名回答的任何东西,含义 就是 Redis 的含义。新能力走自己的命名空间(IDX.*FEED.*VIEW.*FT.*VEC.*),而不是给已有动词加载荷。所以:没有"改进 版"的 SET 语义,也不会给已有回复形状加字段。

2. 含义与执行计划留在你的应用里。kevy 负责存与取,不决定你的数据 是什么意思、也不决定一个查询该怎么执行。这条线拒掉的是 SQL 查询语言、 join 和基于代价的 planner:引擎一旦替你选计划,你的延迟里就多了一个你 没做、也看不见的决定。它给的是声明式访问路径——索引由你命名,代价 由你预测。

3. 拓扑是声明的,不是发现的。成员表来自配置。角色是动态的,成员 不是。

4. 网络是可信的。kevy 永久不做认证与传输加密——请把它放在一个具备 这两者的代理之后(Caddy、nginx、服务网格,或一个私有子网)。

拒绝清单,按领域

领域拒绝为什么,以及改用什么
查询SQL 查询语言、join、基于代价的 planner、视图层的即席谓词线 2——声明一个索引或视图;IDX.QUERY / VIEW.QUERY 显式命名访问路径
查询写路径回调 / 触发器你的写入方本来就知道自己写了什么;回调把延迟藏进写入里
安全AUTH、TLS、ACL、多用户线 4——在代理那一层终结
集群分片多主、跨 DC 双活、CRDT按设计是单 DC、单分区容忍;无冲突合并是应用层的模型
集群Raft / 强一致日志复制这套设计给的一致性是 quorum lease 加 epoch 栅栏;完整共识日志是另一个产品
集群在线 resharding、gossip 发现、动态成员线 3——改配置,重启该成员
存储跨存储事务、租户语义在引擎边界之外;在它之上组合
平台server 的 no_std / MCU 目标五个石头 crate 本来就 no_std-capable;server 需要操作系统

函数面现在到哪了

kevy 那层 SQL 形状的面是一个折叠器,不是查询引擎:它算标量表达式, 好让一个从关系型数据库迁过来的应用不必重新实现它们;而任何需要 planner 的东西,它按名拒绝、绝不静默

每次改动都被两条线卡着:

  • 能力:本弧声明要服务的函数子集里,82.5% 能正确折叠,而且这个比例 只许升不许降。
  • 诚实:全部 89 个探针文件里 零个错误答案。拒绝会自报家门,答错 不会。

你在决定要不要依赖它的时候,该看的是第二条。拒绝在调用处就可见,所以你 是在写代码的时候发现它,不是在生产环境里。