好友中心,数据库架构优化与实践

【Python数据库案例精选 03】构建现代社交平台:图数据库与关系数据库的完美融合实战 在构建现代社交网络平台时,单一数据库类型往往无法满足复杂的业务需求。本文将通过实际案例,深入探讨如何巧妙地结合图数据库(Neo4j)和关系数据库(PostgreSQL),构建一个高性能、高扩展性的社交平台数据架构。我们将从零开始,用Python实现用户管理、好友关系、内容发布和智能推荐等核心功能,让你真正掌握混合数据库架构的精髓。 阅读详情

本文将以“好友中心”为例,介绍“多对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。

 

一、什么是多对多关系

所谓的“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的关联关系,一个学生可以选修多个课程,一个课程可以被多个学生选修,这里学生与课程时间的关系,就是多对多关系。

 

二、好友中心业务分析

好友关系主要分为两类,弱好友关系与强好友关系,两类都有典型的互联网产品应用。

 

弱好友关系的建立,不需要双方彼此同意:

  • 用户A关注用户B,不需要用户B同意,此时用户A与用户B为弱好友关系,对A而言,暂且理解为“关注”;

  • 用户B关注用户A,也不需要用户A同意,此时用户A与用户B也为弱好友关系,对A而言,暂且理解为“粉丝”;

微博粉丝是一个典型的弱好友关系应用。

 

强好友关系的建立,需要好友关系双方彼此同意:

  • 用户A请求添加用户B为好友,用户B同意,此时用户A与用户B则互为强好友关系,即A是B的好友,B也是A的好友;

QQ好友是一个典型的强好友关系应用。

 

好友中心是一个典型的多对多业务,一个用户可以添加多个好友,也可以被多个好友添加,其典型架构为:

  • friend-service:好友中心服务,对调用者提供友好的RPC接口

  • db:对好友数据进行存储

 

三、弱好友关系-元数据简版实现

通过弱好友关系业务分析,很容易了解到,其核心元数据为:

  • guanzhu(uid, guanzhu_uid);

  • fensi(uid, fensi_uid);

其中:

  • guanzhu表,用户记录uid所有关注用户guanzhu_uid

  • fensi表,用来记录uid所有粉丝用户fensi_uid

 

需要强调的是,一条弱关系的产生,会产生两条记录,一条关注记录,一条粉丝记录。

 

例如:用户A(uid=1)关注了用户B(uid=2),A多关注了一个用户,B多了一个粉丝,于是:

  • guanzhu表要插入{1, 2}这一条记录,1关注了2

  • fensi表要插入{2, 1}这一条记录,2粉了1

 

如何查询一个用户关注了谁呢?

回答:在guanzhu的uid上建立索引:

select * from guanzhu where uid=1;

即可得到结果,1关注了2。

 

如何查询一个用户粉了谁呢?

回答:在fensi的uid上建立索引:

select * from fensi where uid=2;

即可得到结果,2粉了1。

 

四、强好友关系-元数据实现一

通过强好友关系业务分析,很容易了解到,其核心元数据为:

  • friend(uid1, uid2);

其中:

  • uid1,强好友关系中一方的uid

  • uid2,强好友关系中另一方的uid

 

uid=1的用户添加了uid=2的用户,双方都同意加彼此为好友,这个强好友关系,在数据库中应该插入记录{1, 2}还是记录{2,1}呢?

回答:都可以

为了避免歧义,可以人为约定,插入记录时uid1的值必须小于uid2。

 

例如:有uid=1,2,3三个用户,他们互为强好友关系,那边数据库中可能是这样的三条记录

{1, 2}

{2, 3}

{1, 3}

 

如何查询一个用户的好友呢?

回答:假设要查询uid=2的所有好友,只需在uid1和uid2上建立索引,然后:

select * from friend where uid1=2

union

select * from friend where uid2=2

即可得到结果。

 

作业,为何不使用:

select * from friend uid1=2 or uid2=2

 

五、强好友关系-元数据实现二

强好友关系是弱好友关系的一个特例,A和B必须互为关注关系(也可以说,同时互为粉丝关系),即也可以使用关注表和粉丝表来实现:

  • guanzhu(uid, guanzhu_uid);

  • fensi(uid, fensi_uid);

 

例如:用户A(uid=1)和用户B(uid=2)为强好友关系,即相互关注:

用户A(uid=1)关注了用户B(uid=2),A多关注了一个用户,B多了一个粉丝,于是:

  • guanzhu表要插入{1, 2}这一条记录

  • fensi表要插入{2, 1}这一条记录

 

同时,用户B(uid=2)也关注了用户A(uid=1),B多关注了一个用户,A多了一个粉丝,于是:

  • guanzhu表要插入{2, 1}这一条记录

  • fensi表要插入{1, 2}这一条记录

 

六、数据冗余是实现多对多关系水平切分的常用实践

对于强好友关系的两类实现:

  • friend(uid1, uid2)表

  • 数据冗余guanzhu表与fensi表(后文称正表T1与反表T2)

在数据量小时,看似无差异,但数据量大时,数据冗余的优势就体现出来了:

  • friend表,数据量大时,如果使用uid1来分库,那么uid2上的查询就需要遍历多库

  • 正表T1与反表T2通过数据冗余来实现好友关系,{1, 2}{2,1}分别存在于两表中,故两个表都使用uid来分库,均只需要进行一次查询,就能找到对应的关注与粉丝,而不需要多个库扫描

 

数据冗余,是多对多关系,在数据量大时,数据水平切分的常用实践。

 

七、如何进行数据冗余

接下来的问题转化为,好友中心服务如何来进行数据冗余,常见有三种方法。

 

方法一:服务同步冗余

 

顾名思义,由好友中心服务同步写冗余数据,如上图1-4流程:

  • 业务方调用服务,新增数据

  • 服务先插入T1数据

  • 服务再插入T2数据

  • 服务返回业务方新增数据成功

 

优点:

  • 不复杂,服务层由单次写,变两次写

  • 数据一致性相对较高(因为双写成功才返回)

 

缺点:

  • 请求的处理时间增加(要插入次,时间加倍)

  • 数据仍可能不一致,例如第二步写入T1完成后服务重启,则数据不会写入T2

 

如果系统对处理时间比较敏感,引出常用的第二种方案

 

方法二:服务异步冗余

数据的双写并不再由好友中心服务来完成,服务层异步发出一个消息,通过消息总线发送给一个专门的数据复制服务来写入冗余数据,如上图1-6流程:

  • 业务方调用服务,新增数据

  • 服务先插入T1数据

  • 服务向消息总线发送一个异步消息(发出即可,不用等返回,通常很快就能完成)

  • 服务返回业务方新增数据成功

  • 消息总线将消息投递给数据同步中心

  • 数据同步中心插入T2数据

 

优点:

  • 请求处理时间短(只插入1次)

 

缺点:

  • 系统的复杂性增加了,多引入了一个组件(消息总线)和一个服务(专用的数据复制服务)

  • 因为返回业务线数据插入成功时,数据还不一定插入到T2中,因此数据有一个不一致时间窗口(这个窗口很短,最终是一致的)

  • 在消息总线丢失消息时,冗余表数据会不一致

 

如果想解除“数据冗余”对系统的耦合,引出常用的第三种方案

 

方法三:线下异步冗余

数据的双写不再由好友中心服务来完成,而是由线下的一个服务或者任务来完成,如上图1-6流程:

  • 业务方调用服务,新增数据

  • 服务先插入T1数据

  • 服务返回业务方新增数据成功

  • 数据会被写入到数据库的log中

  • 线下服务或者任务读取数据库的log

  • 线下服务或者任务插入T2数据

 

优点:

  • 数据双写与业务完全解耦

  • 请求处理时间短(只插入1次)

 

缺点:

  • 返回业务线数据插入成功时,数据还不一定插入到T2中,因此数据有一个不一致时间窗口(这个窗口很短,最终是一致的)

  • 数据的一致性依赖于线下服务或者任务的可靠性

 

上述三种方案各有优缺点,可以结合实际情况选取。

 

数据冗余固然能够解决多对多关系的数据库水平切分问题,但又带来了新的问题,如何保证正表T1与反表T2的数据一致性呢?

 

八、如何保证数据的一致性

上一节的讨论可以看到,不管哪种方案,因为两步操作不能保证原子性,总有出现数据不一致的可能,高吞吐分布式事务是业内尚未解决的难题,此时的架构优化方向,并不是完全保证数据的一致,而是尽早的发现不一致,并修复不一致。

 

最终一致性,是高吞吐互联网业务一致性的常用实践。更具体的,保证数据最终一致性的方案有三种。

 

方法一:线下扫面正反冗余表全部数据

如上图所示,线下启动一个离线的扫描工具,不停的比对正表T1和反表T2,如果发现数据不一致,就进行补偿修复。

 

优点:

  • 比较简单,开发代价小

  • 线上服务无需修改,修复工具与线上服务解耦

 

缺点:

  • 扫描效率低,会扫描大量的“已经能够保证一致”的数据

  • 由于扫描的数据量大,扫描一轮的时间比较长,即数据如果不一致,不一致的时间窗口比较长

 

有没有只扫描“可能存在不一致可能性”的数据,而不是每次扫描全部数据,以提高效率的优化方法呢?

 

方法二:线下扫描增量数据

每次只扫描增量的日志数据,就能够极大提高效率,缩短数据不一致的时间窗口,如上图1-4流程所示:

  • 写入正表T1

  • 第一步成功后,写入日志log1

  • 写入反表T2

  • 第二步成功后,写入日志log2

当然,我们还是需要一个离线的扫描工具,不停的比对日志log1和日志log2,如果发现数据不一致,就进行补偿修复

 

优点:

  • 虽比方法一复杂,但仍然是比较简单的

  • 数据扫描效率高,只扫描增量数据

 

缺点:

  • 线上服务略有修改(代价不高,多写了2条日志)

  • 虽然比方法一更实时,但时效性还是不高,不一致窗口取决于扫描的周期

 

有没有实时检测一致性并进行修复的方法呢?

 

方法三:实时线上“消息对”检测

这次不是写日志了,而是向消息总线发送消息,如上图1-4流程所示:

  • 写入正表T1

  • 第一步成功后,发送消息msg1

  • 写入反表T2

  • 第二步成功后,发送消息msg2

这次不是需要一个周期扫描的离线工具了,而是一个实时订阅消息的服务不停的收消息。

假设正常情况下,msg1和msg2的接收时间应该在3s以内,如果检测服务在收到msg1后没有收到msg2,就尝试检测数据的一致性,不一致时进行补偿修复

 

优点:

  • 效率高

  • 实时性高

 

缺点:

  • 方案比较复杂,上线引入了消息总线这个组件

  • 线下多了一个订阅总线的检测服务

 

however,技术方案本身就是一个投入产出比的折衷,可以根据业务对一致性的需求程度决定使用哪一种方法。

 

九、总结

文字较多,希望尽量记住如下几点:

  • 好友业务是一个典型的多对多关系,又分为强好友与弱好友

  • 数据冗余是一个常见的多对多业务数据水平切分实践

  • 冗余数据的常见方案有三种

             (1)服务同步冗余

             (2)服务异步冗余

             (3)线下异步冗余

  • 数据冗余会带来一致性问题,高吞吐互联网业务,要想完全保证事务一致性很难,常见的实践是最终一致性

  • 最终一致性的常见实践是,尽快找到不一致,并修复数据,常见方案有三种

             (1)线下全量扫描法

             (2)线下增量扫描法

             (3)线上实时检测法

Cosmos DB全球多活架构设计与一致性模型实战 分布式数据库的核心挑战在于如何在延迟、一致性和可用性之间取得工程平衡。Cosmos DB 将全球骨干网与分布式日志(Global Log)深度耦合,实现跨区域写入延迟<10ms的底层能力;其五级可调一致性模型(最终一致→强一致)将CAP理论转化为开发者可配置的确定性选项,使电商库存扣减、实时风控等场景能按业务语义精准分级。结合分区键设计、RU资源建模与Change Feed变更流,它不仅支撑高并发全球读写,更成为构建实时AI特征商店和多活微服务中台的数据底座。本文聚焦云原生环境下分布式数据系统的设计范式迁移 阅读详情

相关推荐

19、深入解析MySQL:案例研究与最佳实践

本文深入探讨了MySQL在不同场景下的应用与优化策略,包括企业级应用中的性能瓶颈突破、Web开发中的数据库架构设计,以及数据分析中的完整数据处理链路构建。通过实际案例分析和最佳实践分享,展示了如何提升MySQL的性能、安全性和高可用性,为开发者和企业提供有价值的参考方案。

pytorchlight8的博客 137

mysql 好友关系_【mysql】关系型数据库中好友关系实现的最佳方案是什么?

社交类应用中,每用户与多个好友存在好友关系,设计的最佳方案是什么的呢?数据库白痴求助。我目前想到的表设计是这样的:CREATE TABLE friend_list (id INT PRIMARY KEY,user_id INT,friend_id INT,);假设有两个用户user_1, user_2创建好友关系是:INSERT INTO friend_list (user...

weixin_32023091的博客 753

实现Android @好友功能:整块删除与输入@后的跳转

简单来说,@好友功能允许用户在消息中直接引用其他用户,使得被引用者能够即时接收到通知。这在微博、论坛、即时通讯软件等平台上非常常见,使得用户可以轻松地参与到讨论中。在社交媒体和各类在线协作平台中,“@”功能已经成为一种通用的提及机制,使得用户可以快速地引起特定用户或团队成员的注意。通常,“@”符号会跟随一个用户名或用户ID,用来指代或引用该用户。这种机制不仅提升了沟通的效率,还增加了平台的互动性。

weixin_29138345的博客 1141

用户和好友关系怎么设计数据库表

2. 好友关系表(Friendship):记录用户和好友之间的关系,可以使用两个外键来表示两个用户之间的关系。3. 用户详细信息表(UserProfile):如果需要存储更多的用户信息,例如性别、生日等,可以创建一个用户详细信息表,并与用户表以一对一关系进行关联。- friend_id (外键,关联User表的user_id)- user_id (外键,关联User表的user_id)- user_id (外键,关联User表的user_id)- status (好友关系状态)- user_id (主键)

黑客CN博客 1685

服务器数据库设计

关于即时通讯的服务端数据库设计,内边包含了文件、群组、会议以及好友等信息的存储设计,不过没有聊天,音频,视频这些信息的存储,有点缺陷,不过也是一参考作用

UE5.3.2 + VS2022社区版在Win11上的C++编译环境配置全解

Unreal Engine 5的C++开发依赖严格的工具链协同,其核心在于Visual Studio编译器版本、Windows SDK与引擎构建系统(UBT)的精准匹配。UE5.3.2强制要求MSVC v143.4(即VS2022 17.4+)及Windows 11 SDK 10.0.22621.0,任何偏差都会引发LNK2019链接失败、C1083头文件缺失或MSB8066构建中断等典型错误。该配置不仅关乎安装顺序,更涉及注册表清理、PATH环境变量、SDK路径注入与运行时DLL加载等底层机制。适用于Wi

weixin_33978722的博客 367

SQL案例学习-微信好友关系

在微信中,两个用户可以相互加为好友。 用两个数据表来存储相关数据,t_user表和t_friend表。 这里需要注意的是两个用户成为好友后,在t_friend表中会有两条记录,以user_id为1和2的两个用户为例,可以看到有两条记录。 上图表示t_friend表中存储的用户好友关系,用直线连接的用户表示彼此间为好友关系。 1.查看好友列表 查询姓名为“刘一”用户的好友列表信息 实现SQL: SELECT f.user_id A..

每天学习一点点 3285

手把手教你用OpenClaw+飞书打造论文写作AI助手(附踩坑实录)

面对几十篇文献,逐一阅读摘要都费时。我:“请提取桌面‘论文参考文献’文件夹中所有PDF的摘要,整理成表格,包含:论文标题、作者、发表年份、核心方法、主要结论。AI助手:“正在处理...已提取18篇论文摘要,汇总表格已保存到桌面‘文献摘要汇总.xlsx’。这比我自己一个个打开PDF复制粘贴快了不止100倍。OpenClaw+飞书的组合,让AI真正成为了我的“数字员工”。虽然配置过程有些曲折,但看到它在飞书里回应指令、帮我处理繁琐工作时,那种成就感无可替代。如果你也在准备论文,不妨试试这套方案。记住,

AcademicIdeas的博客 1041

图数据库Neo4j实现人脉推荐——二度人脉

“吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。” 业务需求:通过现有系统“好友关系”和“用户通讯录”数据,实现人脉推荐——二度人脉….六度人脉技术实现分析: 关系数据库(深度关联表,算死人) 图数据库(天然图关系,选择Neo4j)

终日思 < 须臾学 1万+

卡诺图化简法

目录 1.学前需要了解知识点 2.卡诺图(karnaugh map) 3.逻辑函数的卡诺图化简法 4.总结 1.学前需要了解知识点 最小项的定义 最小项的表示方法 最小项的相邻性 最小项的定义:一个函数的某个乘积项包含了函数的全部变量,其中每个变量都以原变量或反变量的形式出现,且仅出现一次,则这个乘积项称为该函数的一个标准积项,通常称为最小项。 最小项的表示方法:通常用来表...

hahasusu的专栏 17万+

代码审计工具学习之Seay(安装以及初步认识)

目录 1.1名词解释 1.2代码审计的重要性 1.3代码审计的步骤 1.4代码审计的内容 1.5常见的代码审计工具 2 Seay 2.1什么是Seay 2.2Seay的安装过程 3典型漏洞分析 3.1什么是命令注入漏洞 3.2 如何理解命令注入漏洞 3.3 如何防御命令注入漏洞 4 利用工具对命令注入漏洞进行分析 4.1DVWA靶场命令注入漏洞分析 4.2 Pikachu靶场命令注入漏洞分析 1.1名词解释 软件代码审计是对编程项目中源代码的全面...

weixin_52515588的博客 2万+

关于好友(社交)关系的数据库设计

【写在前面】 比如QQ或者一些社交网站,好友关系的数据库应该如何设计?于是我自己大概的进行了一些尝试。 【正文开始】 一开始,好友关系比较简单,比如: 这样1,2,3,4互为好友,它的数据库可以这样设计: CREATE TABLE IF NOT EXISTS users ( user_id char(10) NOT NULL, friend_id char(1...

梦起丶的博客 2万+

【EtherCAT实践篇一】TwinCAT 3安装、使用

FULL(XAE)安装包:包含了XAR的功能,并能进行多种语言的编程和硬件组态,通常安装在编程电脑上;XAR安装包:包含了ADS的功能,是实时运行环境,对 TwinCAT 模块进行加载、执行、管理、实时运行与调用,通常安装在PLC中;RM安装包:在装了高版本的TwinCAT 3后,发现PLC中的TwinCAT版本较低,就需要安装相应低版本的RM安装包切换版本使用(注:4024无法使用RM安装包切换到低于4022的版本,如4020/4018/4016版本。

JXES智能生态系统 5125

挨踢部落直播课堂第十期:亿级数据量高并发下数据库水平切分的结构设计

转自:http://tn.51cto.com/article/373 内容介绍 1.大数据量时,数据库架构设计原则 2.数据库水平切分架构设计方向 3.用户中心,帖子中心,好友中心,订单中心水平切分架构实践 下面是58沈剑老师的演讲实录 大家好,我是58沈剑,架构师之路的小编,后端程序员一枚,平时比较喜欢写写文字。今天和大家分享,数据量很大的情况下,如何进行数据库架构设计(主要是水平切

maohoo的博客 709

【深度学习新浪潮】2025年末AI产业动态:泡沫争议、技术突破与2026投资机会解析

2025年末的AI产业在波动中完成了阶段性调整,技术突破与政策支持构筑了长期成长基石,而结构性分化与风险隐患则要求投资者更加精准地把握机会。2026年作为“风险资产的黄金年”,AI全产业链将持续成为资本聚焦的核心,无论是算力国产化的技术突破,还是应用场景的规模化落地,都有望催生一批优质企业。投资者需立足产业阶段特征,理性看待短期波动,聚焦核心技术与政策红利,方能在AI产业的成长浪潮中把握确定性机会。

专注:太空算力、AI infra、异构调度、大模型成本工程 1809

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

此时我们的卡顿优化基本完成了,我们应该要考虑内存是否会泄漏,如果大家不知道哪些需要回收可以用leakcanary和android profiler进行内存检测,看代码有没有内存泄漏。

龚礼鹏的博客 2547

从好友中心开始,聊“多对多”类业务数据库水平切分架构实践

本文将以“好友中心”为例,介绍“多对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。 一、什么是多对多关系 所谓的“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的关联关系,一个学生可以选修多个课程,一个课程可以被多个学生选修,这里学生与课程时间的关系,就是多对多关系。 二、好友中心业务分析 好友关系主要分为两类,弱好友关系与强好友...

qb170217的博客 270

PCL 点云配准-ICP算法(精配准)

ICP(Iterative Closest Point)算法是一种常用的点云精细配准算法。它通过迭代计算将一组点云变换到另一组点云的最佳位置,最终实现精确的对齐。ICP算法在每次迭代中选择与目标点云最接近的点作为对应点,通过计算最小化源点云和目标点云之间的均方误差(MSE)来进行刚性变换(包括平移和旋转)。

纵马踏花向自由 1724

58沈剑解读:数据库典型架构实践

本文将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者理解,将以“用户中心”为例,讲解数据库架构设计的常见玩法。01用户中心用户中心是一个非常常...

优快云大数据 1024

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

用户/帖子/好友/订单中心如何进行数据库水平切分

本文主要节选和总结自沈剑大佬的四篇文章 必备,前台与后台分离的架构实践 单KEY业务,数据库水平切分架构实践 | 架构师之路 1对多业务,数据库水平切分架构一次搞定 | 架构师之路 多对多业务,数据库水平切分架构一次搞定 1、前台后台分离架构 1.1 前后台用户访问的特点 用户侧,前台访问的特点是: 访问模式有限 访问量较大,DAU不达到百万都不好意思说是互联网C端产品 对访问时延敏感,用户如...

Lucky小黄人的博客 303

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

多对多业务,数据库水平切分架构一次搞定

本文将以“好友中心”为例,介绍“多对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。 一、什么是多对多关系 所谓的“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的关联关系,一个学生可以选修多个课程,一个课程可以被多个学生选修,这里学生与课程时间的关系,就是多对多关系。 二、好友中心业务分析 好友关系主要分为两类,弱好友...

HelloWorld搬运工 800

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

关于数据库场景设计与架构

一、总起 文章:《每每谈到数据库架构,我们在讨论什么》 内容: 单库体系架构 数据库分组架构 数据库分片架构 数据库垂直切分 二、实践一 场景:单key业务,如何做到数据库无限容量 文章:《用户中心,数据库架构优化与实践》 内容: 用户中心业务分析 用户中心水平切分方案 “前台与后台分离”架构设计思想 对于“业务复杂”...

chenpeng19910926的专栏 806

无限容量数据库架构设计

前言和荐言:文中提及的每种实践都值得仔细阅读和体会,尤其一对多中提及的“基因分库法”,结合‘一’和‘多’中的元素巧妙地组合成新ID,很好地达到了按‘一’ 和‘多’入同库和高效查询的目的。回想先前项目中的实践,也不自觉地使用过这个技巧。真是“良好的技巧和实践”都是相似的。 --------------------------正文------------------------------

wqhlmark64的博客 660

数据仓库面试题整理(一)

面试题整理数据仓库基础范式建模和维度建模主题域划分数据仓库分层优点事实表分类缓慢变化维数据输出SLAHive基础Hive Join类型Hive Map和Reduce个数常见Hive SQL面试题连续登陆N日留存共同好友 数据仓库基础 范式建模和维度建模 1.范式建模 2.维度建模 主题域划分 1.主题域和业务过程 2.主题域和主题 数据仓库分层优点 数仓分层优点: 1.解耦数据开发过程,专人专事,降低出问题的风险的同时方便问题定位。 2.用空间换时间,用多人多步操作换取使用数据的高效性。 3.数据流向规范,

无语梦醒的博客 2356
上一篇: 帖子中心,数据库架构优化与实践之三(转载)
下一篇: 订单中心,如何做到数据库无限容量
Woosual
博客等级 码龄9年 14粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值