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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA笔记十六

十六、异常Exception 1.概念 异常:非正常情况,包括空的引用、数组下标越界、内存溢出等 Java提供了异常对象描述这类异常情况。 Java提供了异常机制来进行处理,通过异常机制来处理程序运行期间出现的错误,可以更好地提升程序的…

波特率和比特率的区别联系【理解】

波特率(Baud rate):表示单位时间内载波调制状态变化的次数 ,单位为波特(Baud); 【值得注意的是】单位“波特”本身就已经是代表每秒的调制数,不能用“波特每秒”(Baud per second)为…

MySQL练手 --- 1141. 查询近30天活跃用户数

题目链接:1141. 查询近30天活跃用户数 思路: 题目要求:统计截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户) 要计算…

react中简单的配置路由

1.安装react-router-dom npm install react-router-dom 2.新建文件 src下新建page文件夹,该文件夹下新建login和index文件夹用于存放登录页面和首页,再在对应文件夹下分别新建入口文件index.js; src下新建router文件用于存放路由配置文件…

「Ant Design」Antd 中卡片如何完全不展示内容区域、按需展示内容区域、不展示标题

前言 下面是默认的 Antd 卡片&#xff0c;由以下区域组成 处理 Antd 的 Card 展示形式大致有下面三种 卡片完全不展示内容区域 const App () > (<Card title"Default size card" extra{<a href"#">More</a>} style{{ width: 300 }}b…

nginx的学习(二):负载均衡和动静分离

简介 nginx的负载均衡和动静分离的简单使用 负载均衡配置 外部访问linux的ip地址:80/edu/a.html地址&#xff0c;会轮询访问Tomcat8080和Tomcat8081服务。 Tomcat的准备 准备两个Tomcat&#xff0c;具体准备步骤在nginx的学习一的反向代理例子2中&#xff0c;在Tomcat8080…

崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB

前言 首届YashanDB「迁移体验官」开放后&#xff0c;陆续收到「体验官」们的投稿&#xff0c;小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB》&#xff08;作者&#xff1a;小草&#xff09;&#xff0c;满满…

让你的程序有记忆功能。

目录 环境 代码 环境 大语言模型&#xff1a; gpt-40-mini Mem0: Empower your AI applications with long-term memory and personalization OpenAPI-Key: Mem0-Key&#xff1a; 代码 import osfrom dotenv import load_dotenv from openai import OpenAI from m…

网络安全领域五大注入攻击类型介绍

在网络安全领域&#xff0c;注入攻击是一种常见的攻击方式&#xff0c;攻击者通过向应用程序发送恶意数据来操控应用程序的行为。以下跟随博主通过具体样例一起来掌握以下五种知名的注入攻击类型。 1. SQL注入&#xff08;SQL Injection&#xff09; 1.1. 概述 SQL注入是最常见…

OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式授权码模式

文章目录 认证的具体实现环境的搭建基础版授权服务搭建引入依赖创建数据表yml配置配置SpringSecurity定义认证授权的配置类授权服务器存储客户端信息修改授权服务配置&#xff0c;支持密码模式 基础版授权服务测试授权码模式测试密码模式测试**测试校验token接口** 整合JWT使用…

内网对抗-隧道技术篇防火墙组策略FRPNPSChiselSocks代理端口映射C2上线

知识点&#xff1a; 1、隧道技术篇-传输层-工具项目-Frp&Nps&Chisel 2、隧道技术篇-传输层-端口转发&Socks建立&C2上线Frp Frp是专注于内网穿透的高性能的反向代理应用&#xff0c;支持TCP、UDP、HTTP、HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过…

探索算法系列 - 滑动窗口

目录 长度最小的子数组&#xff08;原题链接&#xff09; 无重复字符的最长子串&#xff08;原题链接&#xff09; 最大连续1的个数 III&#xff08;原题链接&#xff09; 将 x 减到 0 的最小操作数&#xff08;原题链接&#xff09; 水果成篮&#xff08;原题链接&#x…

首个卫星影像全球一张图发布

数据是GIS的血液&#xff01; 我们在《如何加载卫星影像全国一张图》一文中&#xff0c;为你分享过加载卫星影像全国一张图的方法。 现在用该方法&#xff0c;你已经可以加载卫星影像全球一张图了&#xff01; 如何查看全球卫星影像 为了一睹为快&#xff0c;你可以打开以下…

14 集合运算符和矩阵乘法运算符@

集合的交集、并集、对称差集等运算借助于位运算符来实现&#xff0c;而差集则使用减号运算符实现。 print({1, 2, 3} | {3, 4, 5}) # 并集&#xff0c;自动去除重复元素 print({1, 2, 3} & {3, 4, 5}) # 交集 print({1, 2, 3} - {3, 4, 5}) # 差集 print({1, 2, 4, 6, …

Pandas Series对象的创建和基本使用(Pandas Series Object)

pandas是Python的一个第三方数据分析库&#xff0c;其集成了大量的数据模型和分析工具&#xff0c;可以方便的处理和分析各类数据。Pandas中主要对象类型有Series&#xff0c;DataFrame和Index。本文介绍Series对象的创建和基本用法。 文章目录 一、Series对象的创建1.1 通过序…

使用netty编写syslog日志接收服务端

使用netty编写syslog日志接收服务端 1.添加netty依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.72.Final</version> <!-- 版本号可能需要根据实际情况更新 --></dependenc…

Docker Desktop安装(通俗易懂)

1、官网 https://www.docker.com/products/docker-desktop/ 2、阿里云镜像 docker-toolbox-windows-docker-for-windows安装包下载_开源镜像站-阿里云 1. 双击安装文件勾选选项 意思就是&#xff1a; Use WSL 2 instead of Hyper-V (recommended) : 启用虚拟化&#xff0c;…

重生之“我打数据结构,真的假的?”--4.二叉树

1.对称二叉树 . - 力扣&#xff08;LeetCode&#xff09; 思路 &#xff1a; 1.设置两个队列l&#xff0c;r&#xff0c;先将root的左节点入l&#xff0c;右节点入r。 2.分别出队&#xff0c;若出队元素相同 Queuepush(&l, front->left); Queuepush(&l, front->…

调度器——DolphinScheduler讲解及安装教程

调度器——DolphinScheduler讲解及安装教程 一&#xff1a;基本讲解 Dolphin Scheduler 1、开源的分布式任务调度系统 2、支持多种任务类型&#xff0c;包括Shell、Spark、Hive等 3、灵活的任务调度功能和友好的Web界面&#xff0c;方便管理和监控任务的执行情况 架构 操作系…

idea 自动生成pojo类

找到这个View>Tool Windows>Database配置数据库 配置好后刷新&#xff0c;查看是否连接上表 然后找到 点击后选择你将要生成的pojo需要保存到哪个文件&#xff0c;然后再次点击&#xff0c;就生成好了&#xff0c;然后自己稍作修改即可使用该pojo类了