Database design 社交网站nosql数据库的数据建模

Database design 社交网站nosql数据库的数据建模,database-design,amazon-dynamodb,datamodel,data-modeling,amazon-elasticache,Database Design,Amazon Dynamodb,Datamodel,Data Modeling,Amazon Elasticache,我正在开发一个社交网站。现在我正在使用mysql进行数据存储。 现在我不得不转向nosql数据库(我更喜欢ElasticCache或DynamoDb(amazon服务))。但我对数据建模感到困惑。在mysql中,我有以下数据结构 ***UserMst:*** UserID UserName UserEMail BirthDate ..... ***FriendMst*** FriendID (Pk) UserID (UserID) HisFriendID (User'

我正在开发一个社交网站。现在我正在使用mysql进行数据存储。 现在我不得不转向nosql数据库(我更喜欢ElasticCache或DynamoDb(amazon服务))。但我对数据建模感到困惑。在mysql中,我有以下数据结构

***UserMst:***
UserID
UserName
UserEMail
BirthDate
.....

***FriendMst***

FriendID    (Pk)    
UserID      (UserID)
HisFriendID (User's friend id)
Status          

***Notification table***

NotifyID    (Pk)
UserID      (UserID)
HisFriendID (User's friend id)
NotifyDate  (Notify date)

如何为nosql数据库建模?有人能帮我吗?

NOSQL是不同数据平台的集合,因此它取决于您选择的平台。您已经指定了DynamoDb和支持Memcached和Redis的ElasticCache。您基本上是在处理键值存储,使用键值存储支持您的用例的一种方法是:

1) 为用户提供一个类似文档的结构,类似于一个UserID键和一组文档间大致相似的字段:用户名、电子邮件等。这可能是DynamoDb中的一个表、MongoDB中的一个文档或Cassandra中的一个静态列族

2) 您的FriendMst将保存为一个UserID键和一个带有FriendUserID和status的项目数组。对于像MongoDB这样的文档数据库,可以将其嵌入用户文档或存储在相关文档中。在Cassandra中,这可能是一个动态柱族。根据您的查询用例,类似的方法可能适用于通知

已经说过了,考虑像NeN4J这样的图形数据库可能是好的。它们是专门为这类网络用例设计的,可以很容易地返回朋友的朋友,或查找朋友的通知,或对朋友及其朋友的推荐进行排名,等等