@anglinb/city-hash

中文文档
1.1.0发布于 2025/07/09MITTypeScriptESM + CJS零依赖近 30 天下载 1.5万

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

中文使用文档
文档目录15 节
  1. 安装
  2. 使用量
  3. API 密码
  4. cityHash64(input: string | Uint8Array): bigint
  5. cityHash64NumMax(input: string | Uint8Array): number
  6. 特征
  7. 关于CityHash
  8. 点击住宅集成
  9. 直接 SQL 查询
  10. 创建 ClickHouse 函数
  11. 在表格操作中使用
  12. 一致性核查
  13. 业绩
  14. 许可证
  15. 贷项

@anglinb/city-hash (英语)

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

安装

npm install @anglinb/city-hash

使用量

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 查询

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

创建 ClickHouse 函数

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

-- 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

在表格操作中使用

-- 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 执行结果相同 :

// JavaScript
import { cityHash64NumMax } from '@anglinb/city-hash';
const jsResult = cityHash64NumMax('test input');
console.log(jsResult); // e.g., 1234567890123
-- ClickHouse
SELECT bitAnd(cityHash64('test input'), 0x1FFFFFFFFFFFFF);
-- Should return the same value: 1234567890123

业绩

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

许可证

麻省理工学院

贷项

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

版本与发布记录

@anglinb/city-hash 共发布 3 个版本,首次发布于 2025/07/02;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.1.0latest2025/07/091.3 年前
1.0.12025/07/021.3 年前
1.0.02025/07/021.3 年前

关于 @anglinb/city-hash 的常见问题

@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 和提交记录判断。