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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 基于MongoDB灵活模式的特性,小川实现了功能的快速迭代和上线,而数据库侧无需任何更改

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

简介

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

MongoDB在小川的大规模应用

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

image.png

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

小川为什么选择MongoDB

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

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

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

image.png

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

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

● 特殊场景的支持
由于早期没有组件能直接支持布隆过滤器功能,团队利用MongoDB本身灵活的文档模型和集合操作,以较低的代码量完成了布隆过滤器的功能,总体思路如下:

db.bloomFilter.insertOne({bitArray: Array(1000).fill(0)})

然后程序维护一个函数,将元素转化成1000以内的数字,然后将集合中对应的位置置为1。在最右App中的点赞功能中,确定用户是否已经点赞过,就用的这个功能。

挑战与应对

● 自由度带来的性能上的不确定性
因为不同于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方向做更多的尝试。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
17天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
13 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
6天前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
9天前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
20天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
21天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
16天前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
35 2
|
22天前
|
存储 NoSQL MongoDB
MongoDB 数据库引用
10月更文挑战第20天
13 1
|
28天前
|
缓存 弹性计算 NoSQL
新一期陪跑班开课啦!阿里云专家手把手带你体验高并发下利用云数据库缓存实现极速响应
新一期陪跑班开课啦!阿里云专家手把手带你体验高并发下利用云数据库缓存实现极速响应
|
28天前
|
安全 NoSQL 关系型数据库
阿里云数据库:助力企业数字化转型的强大引擎
阿里云数据库:助力企业数字化转型的强大引擎
|
29天前
|
人工智能 NoSQL 测试技术
使用 MongoDB 构建 AI:Patronus 如何自动进行大语言模型评估来增强对生成式 AI 的信心
若需了解更多MongoDB Atlas相关内容,可前往:https://www.mongodb.com/zh-cn/atlas
使用 MongoDB 构建 AI:Patronus 如何自动进行大语言模型评估来增强对生成式 AI 的信心