当前位置: 首页 > news >正文

Corsearch 用 ClickHouse 替换 MySQL 进行内容和品牌保护

图片

本文字数:3357;估计阅读时间:9 分钟

作者:ClickHouse Team

本文在公众号【ClickHouseInc】首发

图片

Chase Richards 自 2011 年在初创公司 Marketly 担任工程负责人,直到 2020 年公司被收购。他现在是品牌保护公司 Corsearch 的工程副总裁。他在最近的一次聚会上与我们分享了他使用 ClickHouse 的经验。

Corsearch 于 2018 年从 Wolters Kluwer 分离出来,成为一家专业公司。新公司通过多次收购迅速扩展,整合专业知识,成为品牌保护解决方案的领导者。Chase Richards 作为工程副总裁,在提升 Corsearch 的品牌保护解决方案方面发挥了关键作用,服务于全球的组织。专注于跟踪国际商标、检测冲突和侵权、打击假冒伪劣、保护内容免受盗版和网络侵权,这意味着需要从大量无害或授权数据中筛选出侵权行为和恶意行为者。早在 2017 年(仍在 Marketly 时),Chase 就面临一些挑战:

  • 事务性数据库的限制——行数据库(如 MySQL)在应用于分析时限制了构建面向外部客户的交互式数据驱动用户界面的可扩展性和灵活性。

  • 操作复杂性——使用多个数据库后端,包括 MySQL、BigQuery 和 MongoDB,以支持关键的面向客户的应用程序,这意味着花费更多时间进行维护而不是构建新功能。

采用 ClickHouse 进行反盗版

Corsearch 的主要客户报告产品之一是搜索引擎保护服务,支持反盗版和内容保护业务。Corsearch 每小时抓取数百万个搜索结果,寻找侵权内容。他们大量投资开发复杂的搜索引擎监控指标,借鉴了 SEO 和 SEM 的最佳实践,如排名跟踪和流量份额。他们专注于让用户界面对试图优化搜索引擎表现的营销团队来说既熟悉又有吸引力,只是把这个理念反过来应用。“我们告诉营销团队,盗版者实际上是在侵占他们的领地——搜索结果的位置,”Chase 说。Corsearch 为他们提供了可视化工具和手段来反击。

然而,报告界面需要对数百个指标进行实时分析,并且这种体验必须是互动的,否则营销团队会感到沮丧。这意味着所有活跃用户在最近和历史数据上的几十个并发查询必须在毫秒内完成。MySQL 数据库不适合处理有 10 多个可筛选维度的工作负载,并且基于时间序列数据进行日、周和月的分组。“我们开发了出色的指标并构建了前端。但我们运行在一组预聚合的 MySQL 表上,进行了大量表分区。操作复杂,但仍然无法扩展。”随着应用使用量增加,这个问题变得更加明显——查询变得越来越慢,用户开始离开应用。Chase 在聚会上说:“起初效果很好,但随着客户系统的不断增长——这对我们的初创企业来说是好消息——数据量也不断增加,而 MySQL 的索引限制和行技术让我们难以应对。”

“我们得到了一些令人瞠目的数据。仅压缩比就使得服务器管理和部署变得更加容易。”

切换到 ClickHouse 实时分析

更换数据库是由 Chase 推动的,他花了大量时间阅读社区内容,寻找新技术和优化性能的方法。他通过几篇 2017 年的 Percona 和 Cloudflare 博客发现了 ClickHouse:“我决定尝试 ClickHouse。很快就发现 ClickHouse 可能带来效率、可靠性和可扩展性的提升。”团队开始用敏捷、可扩展的解决方案替换笨重的 MySQL 系统,从而简化操作并提升客户体验。“我基于 ClickHouse 构建了一个即插即用的替代原型,使用与 MySQL 几乎相同的表结构,2019 年全面投入生产。”这个原型很快成为产品的新架构。“它至今仍在使用,仍然是流程的一部分。”

这不仅仅是让应用程序运行起来。ClickHouse 对时间序列数据的压缩率远超 MySQL(见下图),这减少了运行应用程序所需的服务器数量,简化了服务器管理。“我们得到了一些令人瞠目的数据。压缩比本身就使服务器管理和部署变得更加容易。”当然,ClickHouse 并没有停滞不前,每次发布都在改进数据压缩和性能。“ClickHouse 变得更好了。例如,低基数在性能和压缩比方面是一个巨大的飞跃,”Chase 解释道。

图片

通过向量搜索加强反盗版工作

最近,Corsearch 在其现有的启发式欺诈检测方法中加入了基于向量的分析。Corsearch 使用语言模型的嵌入在网站内容之间创建语义相似性搜索,无论是跨网站还是跨时间,这有助于发现使用类似语言的已知盗版网站并识别网站内容的重大变化,通常表明它已关闭或被屏蔽(盗版生态系统中的常见现象)。“通过利用专家模型和嵌入,我们检测到网页内容的实质性变化,并识别出具有相似特征的页面之间的连接,”Chase 解释道。

Chase 和他的团队对 ClickHouse 与专用向量数据库进行了比较分析,发现尽管专用向量数据库在近似索引方面可能表现更好,但它们仍然是特殊用途的系统,需要特定的技能来采用和维护。相比之下,Corsearch 能够在 ClickHouse 中直接执行多维度限定的向量距离计算,并结合其他检测盗版的方法,借助 SQL 语法实现。因此,无需维护额外的基础设施或学习新的语言。

采用 ClickHouse 进行可观测性

在另一个重要用例中,Corsearch 使用 ClickHouse 监控其搜索引擎抓取设置。搜索引擎服务负责解析 Google、Yahoo 和 YouTube 等主要搜索引擎的结果,必须无缝运行。Chase 和他的团队没有使用现成的可观测性工具,而是开发了自定义埋点来跟踪搜索引擎操作,将遥测数据发送到 ClickHouse,并使用 Grafana 可视化结果并对潜在问题进行告警。最近,这种方法被称为基于 SQL 的可观测性,已经被 Uber、eBay 等技术领导者采用。

从架构上看,这个设计很简单,仅包含两个表。一个表用于通用指标系统,跟踪各种指标如队列深度。另一个表记录“工作原子单元”,用于跟踪抓取网页的尝试。这个基础设施能够轻松创建图表和时间序列指标。每列都可以成为独立的时间序列,确保数据可以随时恢复到原始形式。

“对于我的小团队来说,这非常有效,”Chase 在聚会上说道。虽然埋点是自定义的,但 Chase 承认,如果今天开始,他会优先考虑使用 OpenTelemetry,因为它正在成为标准。ClickHouse 在这个用例中也展示了其性能和资源效率优势:“该系统在磁盘上以不到 325 GB 的空间存储了四年内的 100 亿行数据,”Chase 分享道。

图片

未来方向

ClickHouse 是 Corsearch 数据基础设施的关键元素,提供了业务核心的关键能力,整合了多个用例的分析数据管理,并简化了操作:“ClickHouse 在捕获网络流量数据方面发挥了重要作用,我们通过将复杂的数据管道整合到单一的 ClickHouse 集群中,提高了整体效率和性能。”

展望未来,Chase 计划进一步简化操作:“我很期待在我们的生产工作负载上尝试 ClickHouse Cloud。看到 ClickHouse 的云原生架构在那里的发展真的很酷,这提供了额外的差异化。”在聚会演讲之后,Corsearch 已经开始使用 ClickHouse Cloud 存储每天从数百万抓取图像中生成的嵌入,用于相似性搜索——这使团队能够利用该服务提供的低操作开销和无限存储,以及在相同数据集上实现更快的线性距离扫描。

征稿启示

面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

相关文章:

Corsearch 用 ClickHouse 替换 MySQL 进行内容和品牌保护

本文字数:3357;估计阅读时间:9 分钟 作者:ClickHouse Team 本文在公众号【ClickHouseInc】首发 Chase Richards 自 2011 年在初创公司 Marketly 担任工程负责人,直到 2020 年公司被收购。他现在是品牌保护公司 Corsear…...

常见的应急救援设备有哪些_鼎跃安全

在我们的生活中,应急事件的发生常常是突如其来的,它们对人民的生命财产安全构成重大威胁,同时也对社会稳定提出严峻挑战。在这样的紧急情况下,迅速开展有效的救援工作显得尤为重要。而在整个救援过程中,应急设备的使用…...

Vue 项目部署后首页白屏问题排查与解决

引言 在部署 Vue.js 项目时,有时会遇到首页加载后出现白屏的情况,这可能是由于多种原因造成的。本文将介绍一些常见的排查方法和解决方案,帮助开发者快速定位问题并解决。 1. 常见原因分析 首页白屏的问题可能由以下几个方面的原因导致&am…...

STM32 定时器移相任意角度和占空比,频率可调

由于使用了中断修改翻转的CCR值,对于频率超250K以上不太适用. void Motor1_Init(Motor MotorChValue) { GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;NVIC_InitTypeDef NVIC_Ini…...

C++ 与其他编程语言区别_C++11/14/17新特性总结

C11 decltype类型推导 decltype不依赖于初始化,根据表达式类推导类型 auto b :根据右边a的初始值来推导出变量的类型,然后将该初始值赋给bdecltype 则是根据a表达式来推导类型,变量的初始值与表达式的值无关表达式类型注意点&…...

玩转云服务:Google Cloud谷歌云永久免费云服务器「白嫖」 指南

前几天,和大家分享了: 玩转云服务:Oracle Cloud甲骨文永久免费云服务器注册及配置指南 相信很多同学都卡在了这一步: 可用性域 AD-1 中配置 VM.Standard.E2.1.Micro 的容量不足。请在其他可用性域中创建实例,或稍后…...

用18讲必看:宇哥亲划重点内容+核心题总结

25考研结束之后,张宇老师的风评可能会两极分化 其中一波把张宇老师奉为考研数学之神,吹捧「三向解题法」天下无敌。 另外一波对张宇老师的评价负面,在网上黑张宇老师! 为什么会这么说,因为张宇老师的新版36讲争议太…...

什么是安全生产痕迹化管理?如何做到生产过程中全程痕迹化管理?

安全生产痕迹化管理,简单来说,就是通过记录一些“信息”来确保安全工作的进展。这些方法包括记会议内容、写安全日记、拍照片、签字盖章、指纹识别、面部识别还有手机定位等。记录下来的文字、图片、数据和视频,就像一个个“脚印”&#xff0…...

VIsual Studio:为同一解决方案下多个项目分别指定不同的编译器

一、引言 如上图,我有一个解决方案【EtchDevice】,他包含两个(甚至更多个)子项目,分别是【DeviceRT】和【DeviceWin】,见名知意,我需要一个项目编译运行在RTOS上,譬如一个名叫INTime…...

Flat Ads资讯:Meta、Google、TikTok 7月产品政策速递

Flat Ads拥有全球媒介采买(MediaBuy)业务,为方便广告主及时了解大媒体最新政策,Flat Ads将整理大媒体产品更新月报,欢迎大家关注我们及时了解最新行业动向。 一、Meta 1、Reels 应用推广现可突出显示应用评分、点评和下载量 为了不断优化 Instagram 上的广告体验和广告表现,…...

嵌入式C++、ROS 、OpenCV、SLAM 算法和路径规划算法:自主导航的移动机器人流程设计(代码示例)

在当今科技迅速发展的背景下,嵌入式自主移动机器人以其广泛的应用前景和技术挑战吸引了越来越多的研究者和开发者。本文将详细介绍一个嵌入式自主移动机器人项目,涵盖其硬件与软件系统设计、代码实现及项目总结,并提供相关参考文献。 项目概…...

数据安全堡垒:SQL Server数据库备份验证与测试恢复全攻略

数据安全堡垒:SQL Server数据库备份验证与测试恢复全攻略 在数据库管理中,备份是确保数据安全的关键环节,但仅仅拥有备份是不够的,验证备份的有效性并能够从备份中成功恢复数据同样重要。SQL Server提供了一系列的工具和方法来执…...

嵌入式人工智能(40-基于树莓派4B的水滴传感器和火焰传感器)

虽然这两个传感器水火不容,我还是把他们放到一起了。本文是有线传感器的最后一个部分了。后面如果还有文章介绍有线传感器,也是补充学习其他内容不得已而为之。如果不是,就当我没说,哈哈。 1、水滴传感器 水滴传感器又称雨滴传感…...

EF访问PostgreSql,如何判断jsonb类型的数组是否包含某个数值

下面代码判断OpenUserIds(long[]类型的jsonb)字段,是否包含 8 basequery basequery.Where(m > Microsoft.EntityFrameworkCore.NpgsqlJsonDbFunctionsExtensions.JsonContains(EF.Functions, m.OpenUserIds, new long[] { 8 }));...

Qt 实战(8)控件 | 8.1、QComboBox

文章目录 一、QComboBox1、简介2、功能特性2.1、添加和移除项目2.2、设置和获取当前选中项2.3、模型/视图架构2.4、信号与槽 3、总结 前言: QComboBox 是 Qt 框架中一个非常实用的控件,它允许用户从一个下拉列表中选择一个项目。这个控件广泛应用于需要用…...

模拟算法概览

前言 LeetCode上的模拟算法题目主要考察通过直接模拟问题的实际操作和过程来解决问题。这类题目通常不需要高级的数据结构或复杂的算法,而是通过仔细的逻辑和清晰的步骤逐步解决。 适合解决的问题 模拟算法适合用来解决那些逻辑明确、步骤清晰且可以逐步执行的问…...

uniapp手写滚动选择器

文章目录 效果展示HTML/Template部分&#xff1a;JavaScript部分&#xff1a;CSS部分&#xff1a;完整代码 没有符合项目要求的选择器 就手写了一个 效果展示 实现一个时间选择器的功能&#xff0c;可以选择小时和分钟&#xff1a; HTML/Template部分&#xff1a; <picker…...

智慧医院临床检验管理系统源码(LIS),全套LIS系统源码交付,商业源码,自主版权,支持二次开发

实验室信息系统是集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。它的开发和应用将加快检验科管理的统一化、网络化、标准化的进程。一体化设计&#xff0c;与其他系统无缝连接&#xff0c;全程化条码管理。支持危机值管…...

超市是怎样高效完成客流统计与客流分析

随着科技的进步&#xff0c;越来越多的超市开始采用现代化的客流统计系统来优化日常运营和提升顾客体验。本文将探讨超市客流统计面临的难题、客流统计系统的构成及其应用场景&#xff0c;以及系统如何通过高识别率和热力图分析等功能为超市带来实际效益。 一、景区客流统计难题…...

进程地址空间,零基础最最最详解

目录 建议全文阅读&#xff01;&#xff01;&#xff01; 建议全文阅读&#xff01;&#xff01;&#xff01; 建议全文阅读&#xff01;&#xff01;&#xff01; 一、什么是地址空间 1、概念 2、主要组成部分 3、特点和作用 &#xff08;1&#xff09;虚拟化&#xf…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...