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来实现