9. JSON Support
JSON形式でのデータ引き渡しに対応
Cassandraのスキーマを無視することが目的ではない
カラム名に対するマッピングを簡易に
CREATE TABLE users (
id text PRIMARY KEY,
age int,
state text
);
INSERT INTO users JSON '{"ID": "user123", "Age": 42, "StAtE": "TX"}';
CREATE TABLE tags (
id int PRIMARY KEY,
tags map<frozen<set<text>>,text>
);
INSERT INTO tags JSON '{"id": 10, "tags": {"[¥"tag1¥", ¥"tag2¥"]": "details"}}';
10. Role-based authorization
RDBMS同様のRBAC(Role Based Access Control)
ALL
ALTER
AUTHORIZE
CREATE
DROP
MODIFY
SELECT
•ALL KEYSPACES
•KEYSPACE keyspace_name
•TABLE keyspace_name.table_name
付与可能権限
付与可能場所
11. User-Defined Functions
ユーザー定義関数
SELECT文で実行可能な関数を定義可能
CREATE OR REPLACE FUNCTION fLog (
input double
) CALLED ON NULL INPUT RETURNS
double LANGUAGE java
AS ‘return Double.valueOf(Math.log(input.doubleValue())
);
現時点でJavaとJavaScriptをサポート。
今後、Python、Ruby、 Scala対応予定
12. User-Defined Aggregate Functions
ユーザー定義集約関数
SELECT文で実行可能な集約関数を定義可能
(但し集約そのものはコーディネーターノードで実行)
CREATE OR REPLACE FUNCTION avgState (
state tuple<int,bigint>, val int
)
CALLED ON NULL INPUT RETURNS tuple<int,bigint>
LANGUAGE java AS ‘if (val !=null) {
state.setInt(0, state.getInt(0)+1);
state.setLong(1, state.getLong(1)+val.intValue());
}
return state;
14. A major storage engine rewrite
ストレージエンジンの近代化
CQL構造のストレートエンジン
要するにThrift時代のKVSタイプのデータ構造をやめて技術的負
債を返しましょうという話。
現在のCassandraのデータ構造はセル形式であり複数行読み込むには極め
て非効率的であること。それによってGCの発生を抑えられないことがパ
フォーマンスの悪化につながっている。ここを改善しましょうとの事。
15. Materialized Views
マテビュー実装!!!!
CREATE MATERIALIZED VIEW alltimehigh AS
SELECT user FROM scores
WHERE game IS NOT NULL
AND score IS NOT NULL
AND user IS NOT NULL
AND year IS NOT NULL
AND month IS NOT NULL
AND day IS NOT NULL
PRIMARY KEY (game, score, user, year, month, day)
WITH CLUSTERING ORDER BY (score desc)