小川科技携手阿里云数据库MongoDB:数据赋能企业构建年轻娱乐生态

news2024/11/16 8:29:18

在这里插入图片描述
随着信息技术的飞速发展,企业在处理海量数据时所面临的挑战日益严峻。特别是在年轻娱乐领域,用户行为的多样性和数据量的激增对数据存储与分析技术提出了更高的要求。在此背景下,小川凭借其前瞻性的技术视野,选择了MongoDB作为其数据存储的核心解决方案,成功构建了一套高效、灵活的数据处理体系。MongoDB作为非关系型数据库的代表,以强大的可扩展性、高可用性以及对复杂数据结构的原生支持,为小川的业务发展提供了坚实的技术支撑。

简介

小川科技有限公司(简称:小川)是一家成立于中国本土的高科技企业,致力于提供信息传输、软件和信息技术服务。公司在互联网服务领域有着广泛的布局,旗下有多款知名的应用程序,比如最右、皮皮搞笑等,注册用户数量达到亿级别。小川所开发的应用程序都专注于年轻人的兴趣,以轻松有趣的内容为主,深受年轻用户的欢迎。

MongoDB在小川的大规模应用

不管是“最右”还是“皮皮搞笑”,从上线之初,小川就选择了MongoDB作为主要存储,目前用到了阿里云和自建MongoDB总共几百套实例,总数据量达数百TB,可以说,真正的核心数据都在MongoDB中。

1.业务架构

在这里插入图片描述

目前在小川的业务架构中,除了少数场景,绝大多数数据都会放在MongoDB中进行管理。

2.小川为什么选择MongoDB
  • ** 灵活的模式设计**
    MongoDB 使用 BSON(类似 JSON 的二进制格式)存储数据,允许不同文档在同一个集合中有不同的字段和结构。 对于快速迭代的开发环境,当数据模型尚未稳定时,这种模式的灵活性尤为有用,极大地提高了团队的开发效率。例如,最右App中帖子服务由于业务需要适应不同终端显示的内容,就可以在同一张表中管理不同结构的数据。

  • ** 高效的查询性能**
    MongoDB 提供了强大的查询语言,支持复杂的查询操作。此外,MongoDB 支持多种类型的索引, 包括单字段、复合、文本、和地理空间索引,可以显著提高查询性能。例如,最右App中有个纸飞机服务需要获取位置信息,就用了空间索引功能。

  • ** 嵌套文档和数组支持**
    小川的许多场景用到了层级关系复杂的数据结构,MongoDB 的嵌套文档和数组特性简化了数据存储和查询 。例如,在任务调度系统中,对于调度任务的回避规则,就用到了Json嵌套的功能:
    在这里插入图片描述

  • 灵活的数据存储
    针对社区数据有很多二进制、视频、图片等非结构化数据,MongoDB提供了这些数据和结构化的数据统一存储的功能,极大地简化了业务逻辑。

  • 高可用和可扩展
    MongoDB 支持复制集(Replica Set),这是一种主从架构的高可用性方案。 复制集可以在多个节点之间自动进行数据同步,并在主节点发生故障时自动选举新的主节点,确保系统的高可用性。同时也有shard的分布式方案,能实现数据的水平扩展。

  • 特殊场景的支持
    由于早期没有组件能直接支持布隆过滤器功能,团队利用MongoDB本身灵活的文档模型和集合操作,以较低的代码量完成了布隆过滤器的功能, 总体思路如下:
    db.bloomFilter.insertOne({bitArray: Array(1000).fill(0)})
    然后程序维护一个函数,将元素转化成1000以内的数字,然后将集合中对应的位置置为1。在最右App中的点赞功能中,确定用户是否已经点赞过,就用的这个功能。

3.挑战与应对

DBA 及业务目前遇到的挑战主要包括:

  • 自由度带来的性能上的不确定性
    因为不同于MySQL的强类型约束,MongoDB灵活的字段模型对开发者有一定的要求,如果不限制在一个集合中大量累积字段,会导致一些存储上的成本和查询上性能的低下。
  • 业务不断扩大带来的数据量和维护上的复杂度
    随着业务的不断扩大,数据量不断增加,由此带来了一些存储上和查询上的成本增加和耗时开销。
  • 老版本的升级问题
    公司最早的一批MongoDB都是自建的3.2版本,随着MongoDB的不断迭代、性能上和新特性的引入,导致需要升级MongoDB版本,以提供更稳定的性能。

应对之道:

  • 针对自由度问题
    在业务需要明确业务字段类型的场景下,团队通过官方schema validation功能对某些字段可以做限制,该功能可以对集合设定非常详细的验证规则,包括字段类型、字段是否必需、字段的最小/最大长度、正则表达式匹配等。
    对于其他业务,则通过一系列的sop,针对字段数量、字段类型、索引数量等给出一些合理的建议,同时功能的增加和代码的上线会做针对性的审核和优化,在自由度和性能上做合理的平衡。

  • 针对复杂度问题: 团队针对业务特点和MongoDB自身的一些特性做了如下的改动

  1. 固定集合功能:固定集合在创建时指定大小,一旦存储空间达到上限,旧数据会被自动覆盖。这样,集合的大小保持恒定,不会无限增长,适合短期缓存的场景。

  2. TTL索引功能:由于很大一部分数据只需要存储固定的时间,这时候团队会创建TTL索引,TTL索引会自动删除过期的数据,

  3. shard的水平扩展:在早期shard没出现的时候,通过手动对业务字段取模,然后存到不同的MongoDB副本集中,实现了“伪shard”的功能。后续官方出了真正的shard之后,就不需要额外通过代码逻辑,直接实现了数据的水平扩展,防止单个副本集的存储无限扩展带来的备份、恢复的复杂度。上云后,阿里云数据库MongoDB版的云原生架构 可以支持灵活增删分片,并通过提供SRV 连接地址,解决了增删mongos 带来的连接地址变更的问题,从而进一步提升了集群的水平扩展能力,降低了运维负担。

  • 针对版本升级的问题:
    MongoDB本身的迭代较快,新版本带来的性能优势提升明显,但是早期架构中使用的固定IP方式,使得升级过程比较复杂、甚至有些特殊场景的业务还要停机升级,这促使团队考虑用了云上的解决方案,将大部分业务迁移至阿里云,相较于开源社区,阿里云提供了更长的版本生命周期,为客户版本升级预留了更多的时间;同时阿里云提供了MongoDB版本原地升级的功能,对业务非常友好。

总体收益

小川科技数据库负责人陈伟强表示:
基于MongoDB灵活模式的特性,小川实现了功能的快速迭代和上线,而数据库侧无需任何更改。评论服务最初只需要存储用户ID、评论内容、时间等基本信息,后来因业务需要,增加了基于评论分析的一些用户画像相关的字段。如果用传统的关系性数据库,单修改表结构的时间就需要3-5天,但是用MongoDB就不需要去修改,直接在文档中添加即可,在这个功能的开发中,总体时间比预估的少了20%。

  • MongoDB本身的高可用和分片集群,为业务带来了数据安全性和扩展性的提升。
  • 阿里云及MongoDB原厂的支持,可以让团队面对一些复杂场景或故障的时候,直接和专家团队进行交流,极大的提升了业务的稳定性。
  • 阿里云数据库MongoDB也提供了丰富的运维工具,使得监控、备份、数据同步非常的方便,这些工具的存在让云MongoDB本身的维护和故障的定位变得非常容易。

展望未来:

目前在最右App中,小川正在进行业务创新尝试,用户知识库就用到了Milvus向量数据库。现在的做法是将数据同步到Milvus中,然后实现向量功能,但额外产生了数据实时同步以及额外的存储维护成本。由于未来MongoDB 社区版本将集成向量检索能力,小川团队希望未来能将向量数据功能放在MongoDB中来实现, 希望通过基于统一的平台在AI方向做更多的尝试。

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

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

相关文章

乒乓buffer(国科微笔试填空)_2024年9月26日

乒乓buffer是否提高了并行度?是 流水线式处理,提高并行度 位宽为4,深度为8的sram: 当sel拉高时,a、b模块在wren和rden有效时分别写和读;当sel拉低时,a、b模块在rdenwren有效时分别读和写

远程访问软路由

远程访问软路由主要涉及通过互联网从远程位置访问和控制基于软件的路由器系统。以下是远程访问软路由的一般方法: 一、远程访问软路由的方法 通过Web管理界面访问: 适用于大多数支持Web管理的软路由系统。用户只需在浏览器中输入软路由的公网IP地址或域…

【C语言】手把手带你拿捏指针(完)(指针笔试、面试题解析)

文章目录 一、sizeof和strlen的对⽐1.sizeof2.strlen3.sizeof与strlen对比 二、数组和指针笔试解析1.一维数组2.字符、字符串数组和字符指针代码1代码2代码3代码4代码5代码6 3.二维数组4.总结 三、指针运算笔试题解析代码1代码2代码3代码4代码5代码6 一、sizeof和strlen的对⽐ …

freeRDP OPenssl

libusb需要下载 我使用的是VS2019编译 所以需要include 与vs2019 在cmake里面修改路径 C:/Users/JPM/source/repos/freeRDP/FreeRDP-stable-2.0/libusb-1.0.24/include/libusb-1.0 C:/Users/JPM/source/repos/freeRDP/FreeRDP-stable-2.0/libusb-1.0.24/VS2019/MS64/static/l…

【中级通信工程师】终端与业务(四):通信产品

【零基础3天通关中级通信工程师】 终端与业务(四):通信产品 本文是中级通信工程师考试《终端与业务》科目第四章《通信产品》的复习资料和真题汇总。终端与业务是通信考试里最简单的科目,有效复习通过率可达90%以上,本文结合了高频考点和近几…

计算机毕业设计PySpark+Django深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

本论文的主要研究内容如下: 了解基于Spark的TapTap游戏数据分析系统的基本架构,掌握系统的开发方法,包括系统开发基本流程、开发环境的搭建、测试与运行等。 主要功能如下: (1)用户管理模块:…

OpenCV图像文件读写(5)从文件系统中读取图像的标准函数imread()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从文件加载图像。 imread 函数从指定的文件加载图像并返回它。如果图像无法读取(因为文件缺失、权限不当、格式不受支持或无效&…

IDEA使用技巧和插件推荐

作为专业开发人员,选择一个强大的集成开发环境(IDE)是至关重要的。IntelliJ IDEA(简称IDEA)不仅功能丰富,而且操作便捷,是众多开发者的首选。本文将分享一些使用IDEA的技巧,以及推荐…

测试部署单副本 oceanbase-3.2.4.1 企业版

由于项目需要,测试部署单副本 oceanbase-3.2.4.1 企业版 1.安装前提 准备4cpu,12G内存,100G磁盘 统为centos7.9 yum install -y yum-utils wget net-tools tree yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo 2.创建用…

SLF4J报错log4j又报错

项目场景: 搭建一个spirngboot项目,启动运行时,SLF4J报错 解决后 ~ log4j又报错了。 问题描述 首先是SLF4J报错了,解决完SL4J报错问题后,再次启动项目,log4j又报错了 。。。 报错信息: SLF4J…

IDEA Dependency Analyzer 分析 maven 项目包的依赖

一、场景分析 javax.validation 是我们 SpringMVC 常用的数据校验框架。但是 javax.validation 是一个规范(Java Bean Validation,简称 JSR 380),它并没有具体的实现,它的常用实现,是hibernate-validator。…

【知了社保-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

CentOs-Stream-9 解决此系统未向授权服务器注册问题

RPM包注册安装问题 无法执行yum安装rpm问题(后面安装Mysql会遇到):This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register. Mysql5.7本地无法注册: Mysql8本地无法…

EtherNET IP 转 Profinet 网关:工业通信的桥梁

在工业自动化领域,不同设备之间的通信协议兼容性是一个关键问题。EtherNET IP 和 Profinet 作为两种常用的工业以太网协议,各自在不同的设备和系统中广泛应用。而 EtherNET IP 转 Profinet 网关则成为了连接这两个不同协议世界的桥梁,发挥着至…

OJ在线评测系统 后端 用策略模式优化判题机架构

判题机架构优化(策略模式) 思考 我们的判题策略可能会有很多种 比如 我们的代码沙箱本身执行程序需要消耗时间 这个时间可能不同的编程语言是不同的 比如沙箱执行Java要额外花费2秒 我们可以采用策略模式 针对不同的情况 定义不同独立的策略 而不是把所有情况全部放在一个i…

【Mysql】数据库系统和Mysql

1、数据库系统 数据库(Database)是一个以某种组织方式存储在磁盘上的数据当代集合。 2、数据库应用 数据库应用系统是指基于数据库的应用软件。 3、数据库管理系统(数据库软件) (1)关系型数据库&#…

【JAVA高级】 redis分布式双重加锁(业务校验:防止接口并发调用时数据重复)

文章目录 此问题的考虑思路使用Redis的key-value锁的基本思路结合Redis数据结构实现避免重复注意事项实现代码只避免 name和age的重复避免 name和age的和age和sex重复:使用双重的分布式锁实现: 背景:在日常开发过程中,遇到了一个需…

FGPA实验——触摸按键

本文系列都基于正点原子新起点开发板 FPGA系列 1,verlog基本语法(随时更新) 2,流水灯(待定) 3,FGPA实验——触摸按键 一、触摸操作原理实现 分类:电阻式(不耐用&…

SVN文件不显示修改状态图标

今天安装试用SVN时发现文件不显示修改状态 以下为解决方法: 1,在有.svn的文件夹中右键--tortoiseSvn--setting 2,选中icon Overlays,右侧的status cache 选shell 3,点击icon set 如下图所示 4,修改icon…

MySQL扩展

一、慢查询(慢日志) 默认关闭的 定位慢SQL 简单:show profile,启用时会对服务器的性能产生额外的负担 -- 启用性能监控 mysql> set profiling1;-- 执行SQL mysql> SELECT * from member-- 性能分析 mysql> show p…