Description
中文English
Cassandra is a NoSQL database (a.k.a key-value storage). One individual data entry in cassandra constructed by 3 parts:
- row_key. (a.k.a hash_key, partition key or sharding_key.)
- column_key.
- value
row_key is used to hash and can not support range query. Let's simplify this to a string.
column_key is sorted and support range query. Let's simplify this to integer.
value is a string. You can serialize any data into a string and store it in value.
column_key is sorted and support range query. Let's simplify this to integer.
value is a string. You can serialize any data into a string and store it in value.
Implement the following methods:
insert(row_key, column_key, value)
query(row_key, column_start, column_end)
return a list of entries
Have you met this question in a real interview?
Example
Example 1:
Input:
insert("google", 1, "haha")
query("google", 0, 1)
Output: [(1, "haha")]
Example 2:
Input:
insert("google", 1, "haha")
insert("lintcode", 1, "Good")
insert("google", 2, "hehe")
query("google", 0, 1)
query("google", 0, 2)
query("go", 0, 1)
query("lintcode", 0, 10)
Output:
[(1, "haha")]
[(1, "haha"),(2, "hehe")]
[]
[(1, "Good")]
Code (Java):
/** * Definition of Column: * public class Column { * public int key; * public String value; * public Column(int key, String value) { * this.key = key; * this.value = value; * } * } */ public class MiniCassandra { Map<String, TreeMap<Integer, Column>> rowMap; public MiniCassandra() { // do intialization if necessary rowMap = new HashMap<>(); } /* * @param raw_key: a string * @param column_key: An integer * @param column_value: a string * @return: nothing */ public void insert(String row_key, int column_key, String value) { // write your code here TreeMap<Integer, Column> columnMap = rowMap.getOrDefault(row_key, new TreeMap<>()); Column column = new Column(column_key, value); columnMap.put(column_key, column); rowMap.put(row_key, columnMap); } /* * @param row_key: a string * @param column_start: An integer * @param column_end: An integer * @return: a list of Columns */ public List<Column> query(String row_key, int column_start, int column_end) { if (!rowMap.containsKey(row_key)) { return new ArrayList<Column>(); } TreeMap<Integer, Column> columnMap = rowMap.get(row_key); NavigableMap<Integer, Column> rangeMap = columnMap.subMap(column_start, true, column_end, true); List<Column> ans = new ArrayList<>(); for (Integer key : rangeMap.keySet()) { ans.add(rangeMap.get(key)); } return ans; } }
No comments:
Post a Comment