采访-您将如何使用数据库来大规模地提供“显示该帖子作者拥有多少朋友的每条帖子?”

问题描述 投票:-1回答:1

我有以下不限成员名额的面试问题(请参阅下面的详细信息-我提到了以下内容:

  1. 像在redis / hazelcast集群中一样缓存数据
  2. 预先计算并维护好友数
  3. 基于用户标识共享数据库

我知道no-sql的基础知识,但是对它们不起作用。因此,没有提及任何与此相关的内容,因为我可能会说根本上是错误的。您能否让我知道您的想法,以及关于如何改进诸如w.r.t数据库架构和规模之类的开放性问题的想法?是的,面试官没有留下深刻的印象,因为我的回答可能有点含糊-所以想改善。谢谢您提前的帮助:)

场景-

我们正在开发Facebook的克隆版本,允许用户与其社交网络共享内容。用户以无限流查看帖子。我们的产品只有数千名用户,但我们希望它很快就会像Facebook一样受欢迎!

[我们想为每个帖子添加实时数字计数,以显示该帖子的作者有多少个朋友。

现在,我们的数据库有两个表,'user'和'user_relationship'。每个友谊关系仅在数据库中出现一次。数据库定义包括:

USER'id'(主键)'名称''created_date'

USER_RELATIONSHIP'id'(主键,每个关系唯一)'user1_id'(已索引)'user2_id'(已索引)'开始日期'

面试问题:

您将如何处理数据库以提供可大规模使用的功能?

sql database nosql schema scalability
1个回答
0
投票
最初,您应该使用group by来操纵数据计数,这应该包含在过程中

Create Procedure getNumericCount(userId varchar(20)) As NumericCount varchar(20); user_id varchar(20); Select user_id, count(distinct user2) into userId, NumericCount from table2 where user_id=userId Group by user_id; END;

[此外,应该进行哈希处理或执行其他类似您已经建立索引的机制,以快速大规模检索数据。 

在大规模分区上也将有所帮助,数据加密,将表拆分以消除不一致的数据冗余的规范化等也将有所帮助,因为在较大规模下,只有2个表具有大量数据可能会导致问题。加上应该使用视图只捕获有用的列,

使用触发器时,您假设用户标识已从一个表中删除,然后重新定义的表也将受到影响,并保留备份。

© www.soinside.com 2019 - 2024. All rights reserved.