UNPKG

imean-cassandra-orm

Version:

cassandra orm

126 lines (100 loc) 2.52 kB
# IMean Cassandra ORM (v2) 基于 Zod 的 Cassandra ORM,提供类型安全的 schema 定义、CQL 编译、schema 同步与可选的 ClickHouse 双写。 ## 特性 - **类型安全**:基于 Zod 的 schema 验证与类型推断 - **自动 CQL 生成**:CRUD 与查询条件自动编译 - **Schema 同步**:自动创建与迁移表结构(含索引) - **可选双写**:best‑effort 写入 ClickHouse - **向量搜索**:支持 ANN 向量检索 ## 安装 ```bash npm install imean-cassandra-orm ``` ## 快速开始 ### 1) 定义 Schema ```ts import { z } from "zod"; import { defineTable, Types } from "imean-cassandra-orm"; const userSchema = defineTable({ keyspace: "my_keyspace", tableName: "users", fields: { user_id: z.string(), email: z.string().email(), name: z.string(), age: z.number().int().positive(), is_active: z.boolean(), metadata: Types.json(), created_at: z.date(), }, partitionKey: ["user_id"], }); ``` ### 2) 初始化 Client(推荐简化方式) ```ts import { createClientV2 } from "imean-cassandra-orm"; const { client, shutdown } = await createClientV2({ cassandra: { contactPoints: ["127.0.0.1"], localDataCenter: "datacenter1", }, clickhouse: { config: { host: "127.0.0.1", port: 8123, username: "default", password: "localpass", database: "default", }, }, }); ``` ### 3) 基本 CRUD ```ts const userModel = client.model(userSchema); await userModel.syncSchema(); await userModel.insert({ user_id: "u1", email: "u1@example.com", name: "Alice", age: 20, is_active: true, metadata: { score: 95 }, created_at: new Date(), }); const found = await userModel.findOne({ user_id: "u1" }); await userModel.update({ user_id: "u1" }, { name: "Bob" }); await userModel.delete({ user_id: "u1" }); ``` ## Schema 同步 ```ts await userModel.syncSchema(); // 自动创建/迁移表结构 ``` ## 查询语法 详见 `QUERY_SYNTAX.md`。 ## 向量搜索 ```ts const vectorSchema = defineTable({ keyspace: "my_keyspace", tableName: "docs", fields: { id: z.string(), embedding: Types.vector(128), title: z.string(), }, partitionKey: ["id"], indexes: { embedding: { similarity_function: "COSINE" }, }, }); const model = client.model(vectorSchema); await model.syncSchema(); const results = await model.find( { embedding: new Array(128).fill(0).map(() => Math.random()) }, { limit: 10 } ); ``` ## 关闭连接 ```ts await shutdown(); ```