我有以下不限成员名额的面试问题(请参阅下面的详细信息-我提到了以下内容:
我知道no-sql的基础知识,但是对它们不起作用。因此,没有提及任何与此相关的内容,因为我可能会说根本上是错误的。您能否让我知道您的想法,以及关于如何改进诸如w.r.t数据库架构和规模之类的开放性问题的想法?是的,面试官没有留下深刻的印象,因为我的回答可能有点含糊-所以想改善。谢谢您提前的帮助:)
场景-
我们正在开发Facebook的克隆版本,允许用户与其社交网络共享内容。用户以无限流查看帖子。我们的产品只有数千名用户,但我们希望它很快就会像Facebook一样受欢迎!
[我们想为每个帖子添加实时数字计数,以显示该帖子的作者有多少个朋友。
现在,我们的数据库有两个表,'user'和'user_relationship'。每个友谊关系仅在数据库中出现一次。数据库定义包括:
USER'id'(主键)'名称''created_date'
USER_RELATIONSHIP'id'(主键,每个关系唯一)'user1_id'(已索引)'user2_id'(已索引)'开始日期'
面试问题:
您将如何处理数据库以提供可大规模使用的功能?
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个表具有大量数据可能会导致问题。加上应该使用视图只捕获有用的列,
使用触发器时,您假设用户标识已从一个表中删除,然后重新定义的表也将受到影响,并保留备份。