Example #1
0
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'
Example #4
0
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'
Example #5
0
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')
Example #7
0
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')
Example #8
0
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)
Example #10
0
class HBaseFollowing(HBaseModel):
    """
    Save users the from_user_id is following, sorted by 'from_user_id + created_at'

    Enable queries:
    1. from_user_id followings order by created_at
    2. range query for from_user_id followings given time range
    3. range query for from_user_id followings given before or after a timestamp
    """
    # row_key
    from_user_id = hbase_models.IntegerField(reverse=True)
    created_at = hbase_models.TimeStampField()
    # column_key
    to_user_id = hbase_models.IntegerField(column_family='cf')

    class Meta:
        table_name = 'twitter_followings'
        row_keys = (
            'from_user_id',
            'created_at',
        )