# @anglinb/city-hash 中文文档

规范地址：https://npmcn.com/package/%40anglinb/city-hash/

版本：1\.1\.0
npm 元数据更新时间：2025-07-09T02:41:16.019Z
中文译文更新时间：2026-11-06T04:04:46.546Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40anglinb/city-hash
原文对照：https://npmcn.com/package/%40anglinb/city-hash/?lang=original
项目主页：https://github.com/anglinb/city-hash#readme
源码仓库：https://github.com/anglinb/city-hash

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：22.6 kB，5 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2025-07-01T22:24:01.922Z
- 最新版本发布：2025-07-09T02:41:15.848Z
- 近 30 天下载量：15469（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：3（近 12 个月 0 个）

## 中文简介

TypeScript 执行 CityHash64 - 非晶体散列函数

## 安装

```sh
npm install @anglinb/city-hash
```

也可以使用：`pnpm add @anglinb/city-hash`、`yarn add @anglinb/city-hash`、`bun add @anglinb/city-hash`

## README

# @anglinb/city-hash (英语)

TypeScript执行Google的CityHash64算法——一种快而非晶体散列函数.

## 安装

```bash
npm install @anglinb/city-hash
```

## 使用量

```typescript
import { cityHash64, cityHash64NumMax } from '@anglinb/city-hash';

// Hash a string
const hash1 = cityHash64("hello world");
console.log(hash1); // 12386028635079221413n

// Hash binary data
const data = new Uint8Array([1, 2, 3, 4, 5]);
const hash2 = cityHash64(data);
console.log(hash2); // 8996017160742164057n

// The result is always a BigInt
const hash3 = cityHash64("The quick brown fox jumps over the lazy dog");
console.log(hash3.toString()); // "16697807905646383735"

// Get a JavaScript-safe number (truncated to 53 bits)
const safeHash = cityHash64NumMax("hello world");
console.log(safeHash); // 1129659810357413 (safe JavaScript number)
```

## API 密码

### `cityHash64(input: string | Uint8Array): bigint`

使用Google的CityHash算法计算输入数据的64位散列.

**参数:**

-   `input`: 数据为散列. 可以是字符串还是字符串 `Uint8Array`。 。 。 .

**回返情况:**

-   64位散列值为 `BigInt`。 。 。 .

### `cityHash64NumMax(input: string | Uint8Array): number`

计算一个 CityHash64 已切换到 JavaScript 的 `Number.MAX_SAFE_INTEGER` (53位数).

**参数:**

-   `input`: 数据为散列. 可以是字符串还是字符串 `Uint8Array`。 。 。 .

**回返情况:**

-   作为 Java 脚本的散列值 `number`,保证 `Number.MAX_SAFE_INTEGER`。 。 。 .

当您需要使用 JavaScript 语境中需要常规数字而不是 BigInts 的散列值,例如 JSON 序列化或某些数据库操作时,此函数是有用的.

## 特征

-   **快点**: 优化速度并设计为散列表
-   **高质量**: 产生碰撞率低的分布良好的散列值
-   **类型脚本**: 带有适当类型定义的完整类型脚本支持
-   **兼容**:生产与最初C执行相同的产出
-   **弹性**: 接受字符串和二进制数据(Uint8Array)

## 关于CityHash

CityHash是由Google创建的散列函数家族,用于散列表和其他应用,速度比密码安全更重要. CityHash64特地出产64位散列值.

此项实施工作:

-   匹配 C 原执行的行为
-   处理字符串和二进制输入数据
-   在 JavaScript 中将 BigInt 用于适当的 64 位算术
-   接受全面测试

## 点击住宅集成

这个 `cityHash64NumMax` 函数旨在与 ClickHouse 数据库操作兼容。 以下是如何在 ClickHouse 中复制相同的短散列值:

### 直接 SQL 查询

```sql
-- Get the same result as cityHash64NumMax("hello world")
SELECT bitAnd(cityHash64('hello world'), 0x1FFFFFFFFFFFFF);
-- Result: 1129659810357413
```

### 创建 ClickHouse 函数

您可以在 ClickHouse 中创建用户定义的功能以匹配 `cityHash64NumMax`数字 :

```sql
-- Create a function that matches cityHash64NumMax
CREATE FUNCTION cityHash64NumMax AS (input) -> bitAnd(cityHash64(input), 0x1FFFFFFFFFFFFF);

-- Usage examples
SELECT cityHash64NumMax('hello world');           -- 1129659810357413
SELECT cityHash64NumMax('test string');           -- 7852960286803079
SELECT cityHash64NumMax('another example');       -- 6487172654247519
```

### 在表格操作中使用

```sql
-- Create a table with a hash column
CREATE TABLE user_events (
    user_id String,
    event_data String,
    hash_value UInt64 MATERIALIZED cityHash64NumMax(event_data)
) ENGINE = MergeTree()
ORDER BY user_id;

-- Insert data (hash_value will be automatically calculated)
INSERT INTO user_events (user_id, event_data) VALUES 
    ('user1', 'login'),
    ('user2', 'purchase'),
    ('user1', 'logout');

-- Query using the hash
SELECT * FROM user_events WHERE hash_value = cityHash64NumMax('login');
```

### 一致性核查

您可以验证您的 JavaScript 和 ClickHouse 执行结果相同 :

```typescript
// JavaScript
import { cityHash64NumMax } from '@anglinb/city-hash';
const jsResult = cityHash64NumMax('test input');
console.log(jsResult); // e.g., 1234567890123
```

```sql
-- ClickHouse
SELECT bitAnd(cityHash64('test input'), 0x1FFFFFFFFFFFFF);
-- Should return the same value: 1234567890123
```

## 业绩

CityHash的设计快于现代处理器. 这种TypeScript执行保持了良好的性能,同时为TypeScript提供了安全和方便.

## 许可证

麻省理工学院

## 贷项

基于Geoff Pike和Jyrki Alakurijala在Google的最初CityHash算法.

-   原文C 执行情况: [https://github.com/google/cityhash 页面存档备份,存于互联网档案馆](https://github.com/google/cityhash)
-   算法纸 : [https://github.com/google/cityhash 页面存档备份,存于互联网档案馆](https://github.com/google/cityhash)

## 常见问题

### @anglinb/city-hash 是什么？

TypeScript 执行 CityHash64 - 非晶体散列函数

### 如何安装 @anglinb/city-hash？

在项目目录运行 npm install @anglinb/city-hash，或使用 pnpm add / yarn add / bun add。

### @anglinb/city-hash 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @anglinb/city-hash 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @anglinb/city-hash 可以商用吗？

@anglinb/city-hash 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @anglinb/city-hash 的下载量有多少？

根据 npm 官方下载统计，@anglinb/city-hash 在 2026/10/06 – 2026/11/04 这 30 天内被下载 15,469 次，日均约 516 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @anglinb/city-hash 还在维护吗？

最新版本 1\.1\.0 发布于 2025/07/09（1\.3 年前）；至今共发布 3 个版本，其中过去 12 个月发布了 0 个；首次发布于 2025/07/02。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

