Mini Cassandra

Cassandra是一种NoSQL数据库系统,是基于键值对的NoSQL系统(row-column based),有两层嵌套的key,第一层为row_key,无法排序,第二层为columnKey,可以用于排序和range query,最后是value数据,rowKey和columnKey都不是唯一的,但是rowKey+columnKey的组合是唯一的

"""
Definition of Column:
class Column:
    def __init__(self, key, value):
        self.key = key
        self.value = value
"""
class MiniCassandra:

    def __init__(self):
        # initialize your data structure here.
        self.root = {}

    # @param {string} raw_key a string
    # @param {int} column_key an integer
    # @param {string} column_value a string
    # @return nothing
    def insert(self, raw_key, column_key, column_value):
        # Write your code here
        self.root.setdefault(raw_key, [])
        for col in self.root[raw_key]:
            if col.key == column_key:
                col.value = column_value
                return 

        self.root[raw_key].append(Column(column_key, column_value))

    # @param {string} raw_key a string
    # @param {int} column_start an integer
    # @param {int} column_end an integer
    # @return {Column[]} a list of Columns
    def query(self, raw_key, column_start, column_end):
        # Write your code here
        if raw_key not in self.root or column_start > column_end:
            return []
        return [x for x in sorted(self.root[raw_key], cmp=lambda x, y: cmp(x.key, y.key)) if column_start <= x.key <= column_end]

上面将for循环放在了insert里面写,也可以像九章把for循环放到query里面写,那样就需要利用两层的dict来实现

results matching ""

    No results matching ""