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

在这里插入图片描述
随着信息技术的飞速发展,企业在处理海量数据时所面临的挑战日益严峻。特别是在年轻娱乐领域,用户行为的多样性和数据量的激增对数据存储与分析技术提出了更高的要求。在此背景下,小川凭借其前瞻性的技术视野,选择了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.rhkb.cn/news/435832.html

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

相关文章

手机二要素接口如何用C#实现调用

一、什么是手机二要素? 手机二要素又称运营商二要素,运营商二要素核验,实名核验,手机号核验,手机二要素核验,即传入姓名、手机号码,校验此两项是否一致。实时核验,返回校验结果&…

web应用合规(一)双因子认证2FA解决方案

文章目录 背景知识什么是2FA认证因子分类知识因素持有因素 解决方案密码 OTP密码 TOTP方案对比 参考文档后记 最近做海外项目,对合规方面的要求比较高,写一篇流水账来记录下 登录时的双因子认证过程,于是开启了2FA(2 factor au…

jenkins 构建报错ERROR: Error fetching remote repo ‘origin‘

问题描述 修改项目的仓库地址后,使用jenkins构建报错 Running as SYSTEM Building in workspace /var/jenkins_home/workspace/【测试】客户端/client-fonchain-main The recommended git tool is: NONE using credential 680a5841-cfa5-4d8a-bb38-977f796c26dd&g…

【包教包会】CocosCreator3.x框架——音频声音模块(无需导入、无需常驻节点)

下载地址:AudioDemo3.x: CocosCreator3.x框架——音频模块 注意事项: 1、gi.musicPlay、gi.soundPlay是同步函数,使用前必须先将音频加载到缓存 Demo通过SceneLoading实现了一个极简的Loading页面,将音频全部加载后进入游戏&…

Find My汽车钥匙|苹果Find My技术与钥匙结合,智能防丢,全球定位

随着科技的发展,传统汽车钥匙向智能车钥匙发展,智能车钥匙是一种采用先进技术打造的汽车钥匙,它通过无线控制技术来实现对车门、后备箱和油箱盖等部件的远程控制。智能车钥匙的出现,不仅提升了汽车的安全性能,同时也让…

蓝桥杯—STM32G431RBT6(RTC时钟获取时间和日期)

一、RTC是什么,有什么用? 在 STM32 中,RTC(Real-Time Clock,实时时钟)主要有以下作用: 时间保持:即使在系统断电情况下,也能持续记录时间。(需要纽扣电池供电…

LORA DASH -一种更高效的微调方式

LORA DASH -一种更高效的微调方式 概述 大型语言模型(LLMs)通过在大规模数据集上的预训练,能够捕捉和学习丰富的语言特征和模式。目前,尽管预训练模型在诸多任务上取得了显著的成果,但它们在特定任务上的表现仍有提升…

iOS--App启动过程及优化

前言 App启动是用户对于一个app的第一印象,因此如何使用户在最短的时间打开进入app显得格外重要。启动优化因此成为了App调优至关重要的一项。 只有具体了解了App的启动过程,我们才能对其进行优化。 App启动过程 App启动分为冷启动和热启动 热启动&…

【2025】springboot基于微信小程序记账本的设计与实现(源码+文档+调试+答疑)

文章目录 前言一、主要技术?二、项目内容1.整体介绍(示范)2.运行截图3.系统测试 总结更多项目 前言 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,记账本小…

臀部筋膜炎吃什么药最有效

臀部筋膜炎患者大多数会出现疼痛的症状,且疼痛程度可能会随着病情的加重而不断加重。疼痛可能表现为持续性或间歇性,严重时甚至可能出现针扎样疼痛。在疼痛的同时,如果按压臀部局部,可能会导致疼痛症状加剧。由于炎症刺激&#xf…

WPS在表格中填写材料时,内容过多导致表格不换页,其余内容无法正常显示 以及 内容过多,导致表格换页——解决方法

一、现象 1,内容过多导致表格不换页,其余内容无法正常显示 2,内容过多,导致表格换页 二、解决方法 在表格内右击,选择表格属性 在菜单栏选择行,勾选允许跨页断行,点击确定即可 1&#xff0…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】 一、TFLM是什么?二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module nam…

Redis篇(缓存机制 - 分布式缓存)(持续更新迭代)

目录 一、单点 Redis 的问题 1. 数据丢失问题 2. 并发能力问题 3. 故障恢复问题 4. 存储能力问题 5. 四种问题的解决方案 二、Redis持久化(两种方案) 1. RDB持久化 1.1. 简介 1.2. 执行时机 save命令 bgsave命令 停机时 触发RDB条件 1.3. …

phpstudy简易使用

注意,本文所述的操作步骤均建立在电脑上已经完成php环境变量的配置与vscode的安装之上 、

河南移动:核心营业系统稳定运行超300天,数据库分布式升级实践|OceanBase案例

河南移动,作为电信全业务运营企业,不仅拥有庞大的客户群体和业务规模,还引领着业务产品与服务体系的创新发展。河南移动的原有核心营业系统承载着超过6000万的庞大用户量,管理着超过80TB的海量数据,因此也面临着数据规…

网络安全法中,个人信息保护的措施和原则有哪些?

《中华人民共和国网络安全法》中关于个人信息保护的规定强调了几项基本原则和措施,以确保个人信息的安全。以下是其中的一些要点: 原则 合法性:个人信息的收集和使用必须符合法律规定。 正当性:信息收集和使用的目的是正当的&…

算法葫芦书(笔试面试)

一、特征工程 1.特征归一化:所有特征统一到一个区间内 线性函数归一化(0到1区间)、零均值归一化(均值0,标准差1) 2.类比型特征->数值性特征 序号编码、独热编码、二进制编码(010&#xf…

数学建模--什么是数学建模?数学建模应该怎么准备?

前言 这是去年底学数学建模老哥的建模课程笔记;未来本人将陆陆续续的更新数学建模相关的一些基础算法,大家可以持续关注一下;提示:数学建模只有实战才能提升,光学算法没有啥意义,也很难学的很懂。 文章目录…

基于ESP8266—AT指令连接阿里云+MQTT透传数据(2)

MQTT_TX设备为发送数据的Topic,使用MQTT-fx软件实现 MQTT_RX设备为接收(订阅)数据的Topic,使用ESP8266通过AT指令实现 一、使用MQTT-fx实现发送数据 首先进入控制台,获取发送设备 “ MQTT_TX ” 的MQTT连接参数,具体具体操作如…

【Redis入门到精通五】Java如何像使用MySQL一样使用Redis(jedis安装及使用)

目录 Jedis 1.jedis是什么 2.jedis的安装配置 3.jedis的基础命令操作展示 1.set和get操作: 2.exists和del操作: 3.keys和type操作: 4. expire和ttl: Jedis Java 操作 redis 的客⼾端有很多,其中最知名的是 jedi…