2015-02-09 72 views
1

我需要在Apache Cassandra中建模和存儲財務數據。Apache Cassandra中的財務數據分析建模?

數據按日期和業務單位進行訪問,所以目前我的模型使用日期和業務單位ID作爲複合行鍵。

我想使用寬行,這樣我就可以在一個查詢中將數字拉到一整天(和單位)。

對於任何給定的一天,對於特定的業務單位,我需要存儲一系列越來越精細故障的,像這樣(忽略的人物,他們是純粹的舉例):

| rowkey  | USD | GBP | JPY | etc ....  
|-------------|-------|------|------|----------  
| 31122014-1 | 112 | 3006 | 234 |  
| 31122014-2 | 3378 | -12.4| 998 |  
| 31122014-3 | -456 | 2034 | 127 | 

然後一個更詳細的分類,使用化合物列:

| rowkey  | USD-D1 | USD-D2 | GBP-D1 | GBP-D2 | etc ....  
|-------------|--------|--------|--------|------------------  
| 31122014-1 | 65 | 54  | 175 | 29  | 
| 31122014-2 | 2003 | -6.4 | 603 | 349 | 
| 31122014-3 | -230 | -198 | -53 | 217 | 

然後一個更詳細的分類:

| rowkey  | USD-D1-X1 | USD-D1-X2 | USD-D1-X3 | USD-D2-X1 | etc ....  
|-------------|-----------|-----------|-----------|-----------|-------  
| 31122014-1 | 23  | 16  | 98  | 29  | 
| 31122014-2 | 389  | -3.2  | 237  | 119  | 
| 31122014-3 | -105  | -67  | -28  | 178  | 

這是使用三個獨立的列系列對這些故障進行建模的最佳方法(如此處所示)?

或者只存儲最細粒度的細分,然後使用某種形式的列聚合(如果存在)來提取不太細化的數據集會更有意義嗎?

我知道卡桑德拉的聚合能力是有限/不存在的,我沒有在API中找到任何東西來建議我如何聚合這樣的列。

我知道我可以在應用層進行聚合,但問題是關於檢索不必要的數據,移動計算開銷和維護額外的列族之間的權衡。我希望Cassandra提供了一些在數據層解決這個問題的方法。

+0

卡桑德拉不支持那種你問及可能永遠聚合的將。然而,有完整的分析包可以與Cassandra集成以提供這些功能。您最好的選擇是DataStax Enterprise,使用他們的Hadoop/Spark集成,或者搞清楚如何在Cassandra集羣上自己使用OSS Spark-Cassandra連接器。 – mildewey 2015-02-10 23:22:36

回答

0

取決於你如何想你想要的數據進行建模,您可以

  1. 使用您的解決方案。在此創建一個列族以獲得更多詳細信息

  2. 如果您覺得列族太多或者您將始終使用下一列家族,我建議將其作爲主鍵的一部分作爲羣集鍵或直接作爲分區鍵

的一部分。例如: 如果按照你的數據模型,如果行鍵訪問總是要包括貨幣,你可以像這樣

| rowkey  |currency|  
|---------------|--------| 
| 31122014-1,GBP| 112 | 

模型Obviou狡猾,這將使您的數據單行rowkey更好,但會增加行鍵

  1. 您可以使用聚合以及cassandra允許的自定義類型。

,請考慮以下選擇策略及DCS

a. Distribution of the rows across nodes 
b. Sparse columns vs wide columns 
c. Effects on row cache (if you are going to turn it on) and key cache 
d. And the most important, your selection queries 
0

的人之前,我認爲您的解決方案可能是有效的。對於Cassandra來說,根據您希望針對它執行哪些查詢,將數據存儲在多個地方通常會更好。

如果您將這些用例中的每一個看作三個不同的用例,將在不同的時間查詢,那麼您將得到一個可靠的數據模型。

對於它的價值,這種使用情況下起到很好地CQL的優勢這將如下模型,可以:

CREATE TABLE finance0 (
    day DATE, 
    unit INT, 
    currency TEXT, 
    amount BIGINT, 
    PRIMARY KEY ((day, unit) currency) 
); 

CREATE TABLE finance1 (
    day DATE, 
    unit INT, 
    currency TEXT, 
    sorter1 TEXT, 
    amount BIGINT, 
    PRIMARY KEY ((day, unit) currency, sorter1) 
); 

CREATE TABLE finance2 (
    day DATE, 
    unit INT, 
    currency TEXT, 
    sorter1 TEXT, 
    sorter2 TEXT, 
    amount BIGINT, 
    PRIMARY KEY ((day, unit) currency, sorter1, sorter2) 
);