class HBaseFollowing(models.HBaseModel): # row key from_user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() # column key to_user_id = models.IntegerField(column_family='cf') class Meta: table_name = 'twitter_followings' row_key = ('from_user_id', 'created_at')
class HBaseFollowing(models.HBaseModel): """ from_user_id follows a list of people, row_key is from_user_id + created_at sorted can support - A follow all the people (by created_at) - time range [] A follow who - time spot before/after A follow who """ # row key from_user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() # column key to_user_id = models.IntegerField(column_family='cf') class Meta: table_name = 'twitter_followings' row_key = ('from_user_id', 'created_at')
class HBaseFollower(models.HBaseModel): """ who follow to_user_id, row key is to_user_id + created_at sorted can support - A followers (by created_at) - time range[] who follow A - time spot before/after who follow A """ # row key to_user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() # column key from_user_id = models.IntegerField(column_family='cf') class Meta: row_key = ('to_user_id', 'created_at') table_name = 'twitter_followers'
class HBaseFollowing(models.HBaseModel): """ 存储 from_user_id follow 了哪些人,row_key 按照 from_user_id + created_at 排序 可以支持查询: - A 关注的所有人按照关注时间排序 - A 在某个时间段内关注的人有哪些 - A 在某个时间点之后/之前关注的前 X 个人是谁 """ # row key from_user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() # column key to_user_id = models.IntegerField(column_family='cf') class Meta: row_key = ('from_user_id', 'created_at') table_name = 'twitter_followings'
class HBaseFollower(models.HBaseModel): """ 存储 to_user_id 被哪些人 follow 了,row_key 按照 to_user_id + created_at 排序 可以支持查询: - A 的所有粉丝按照关注时间排序 - A 在某个时间段内被哪些粉丝关注了 - 哪 X 人在某个时间点之后/之前关注了 A """ # row key to_user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() # column key from_user_id = models.IntegerField(column_family='cf') class Meta: row_key = ('to_user_id', 'created_at') table_name = 'twitter_followers'
class HBaseFollowing(models.HBaseModel): """ store from_user_id who you are following,row_key is sorted by from_user_id + created_at can query: - A's following users sorted by followed timestamp - users who A followed in certain range of time - top K users A followed before/after certain timestamp """ # row key from_user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() # column key to_user_id = models.IntegerField(column_family='cf') class Meta: table_name = 'twitter_followings' row_key = ('from_user_id', 'created_at')
class HBaseFollowing(models.HBaseModel): """ store accounts followed by from_user_id row_key order: from_user_id + created_at together support following queries: - all accounts followed by A order by following timestamp - all accounts followed by A as of a timestamp - the first X number of accounts followed by A after/before a timestamp """ from_user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() # column key to_user_id = models.IntegerField(column_family='cf') class Meta: table_name = 'twitter_followings' row_key = ('from_user_id', 'created_at')
class HBaseFollower(models.HBaseModel): """ store all accounts following to_user_id, order row_key by to_user_id + created_at support following queries: - all followers of A ordered by starting time - all followers of A as of a timestamp - X number of follower of A before/after a timestamp """ # row key to_user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() # column key from_user_id = models.IntegerField(column_family='cf') class Meta: row_key = ('to_user_id', 'created_at') table_name = 'twitter_followers'
class HBaseNewsFeed(models.HBaseModel): # 注意这个 user 不是存储谁发了这条 tweet,而是谁可以看到这条 tweet user_id = models.IntegerField(reverse=True) created_at = models.TimestampField() tweet_id = models.IntegerField(column_family='cf') class Meta: table_name = 'twitter_newsfeeds' row_key = ('user_id', 'created_at') def __str__(self): return '{} inbox of {}: {}'.format(self.created_at, self.user_id, self.tweet_id) @property def cached_tweet(self): return MemcachedHelper.get_object_through_cache(Tweet, self.tweet_id) @property def cached_user(self): return MemcachedHelper.get_object_through_cache(User, self.user_id)