Sentry 后端云原生中间件实践 ClickHouse PaaS ,为 Snuba 事件分析引擎提供动力
-- 创建一个新的数据库,用于存储Sentry事件数据
CREATE DATABASE IF NOT EXISTS sentry_events ENGINE = MergeTree()
ORDER BY (datetime, project_id, event_id);
-- 创建一个新的表,用于存储事件的详细信息
CREATE TABLE IF NOT EXISTS sentry_events.events_basic (
`timestamp` DateTime CODEC(ZSTD(1)),
`event_id` String CODEC(ZSTD(1)),
`project_id` Int32 CODEC(ZSTD(1)),
`message` String CODEC(ZSTD(1)),
`platform` String CODEC(ZSTD(1)),
`datetime` DateTime CODEC(ZSTD(1)),
`id` Int32 CODEC(ZSTD(1)),
... -- 其他字段
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(datetime)
ORDER BY (datetime, project_id, event_id);
-- 创建一个新的表,用于存储事件的标签信息
CREATE TABLE IF NOT EXISTS sentry_events.tags (
`key` String CODEC(ZSTD(1)),
`value` String CODEC(ZSTD(1)),
`project_id` Int32 CODEC(ZSTD(1)),
`event_id` String CODEC(ZSTD(1)),
`timestamp` DateTime CODEC(ZSTD(1)),
... -- 其他字段
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (project_id, event_id, key, value);
-- 创建一个新的表,用于存储事件的IP信息
CREATE TABLE IF NOT EXISTS sentry_events.raw_events_ip (
`geoip_country_name` String CODEC(ZSTD(1)),
`geoip_country_code` String CODEC(ZSTD(1)),
`geoip_city` String CODEC(ZSTD(1)),
`geoip_continent_code` String CODEC(ZSTD(1)),
`geoip_region` String CODEC(ZSTD(1)),
`geoip_latitude` Float32 CODEC(ZSTD(1)),
`geoip_longitude` Float32 CODEC(ZSTD(1)),
`ip_address` String CODEC(ZSTD(1)),
`project_id` Int32 CODEC(ZSTD(1)),
`event_id` String CODEC(ZSTD(1)),
`timestamp` DateTime CODEC(ZSTD(1)),
... -- 其他字段
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (project_id, event_id, ip_address);
这个示例展示了如何在ClickHouse中创建用于存储Sentry事件数据的数据库和表。这里使用了MergeTree
作为表的引擎,并且对时间戳字段进行了排序,以便于查询性能。同时,使用CODEC(ZSTD(1))
对数据进行压缩,以优化存储和I/O效率。这种实践是云原生数据库ClickHouse在大数据处理上的一个常见用例。
评论已关闭