Tuesday, August 18, 2015

LIKE CODING: MJ [10] CanView Design



LIKE CODING: MJ [10] CanView Design
Design a system to meet the following requirements:
boolean CanView(Viewer, Object, Owner);

Return true if viewer can read object of owner; otherwise return false.

object has one property which can be public or friends. If it is public, viewer can read object; if it is friends, only friend of owner can read object.

http://stackoverflow.com/questions/8663072/database-design-for-social-network-friends-list-friends-circle-post-sharing
http://www.mitbbs.com/article_t/JobHunting/33022171.html
The problem can be reduced to an isFriend design. 

You have 2 users, check if they are friends. There's a classic RDBMS design 
and there's a NoSQL design. it's not hard either way.

我觉得这个设计包含两个部分,
1. Object Meta data的storage
2. Friend relationship的管理.

对于1,可以用distributed hash map + memcached解决
对于2,可以参考facebook的TAO设计。就是说维护A-FRIEND-B的GRAPH。对于两个朋友
,使用两个有向边维护。为什么用graph,而不是一般的map设计(比如,A的朋友表示
为A->[B, C, D, ....])?我觉得主要是scale问题。对于facebook这样这么大的用户
量,用户之间联系这么复杂的,使用map引起的写操作和写锁会非常难处理。对于这个
friend的有向图,主要是处理A-FRIEND-B这样的三元组的读写。那么可以使用
distributed hash map+index。并且用cache加速读操作。可以通过直接写cache,
batch写disk得方法解决写速度问题。
看看graph db,比如neo4j之类的设计思想
大概就有谱了

Read full article from LIKE CODING: MJ [10] CanView Design

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts