首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为唯一的无id数据开发Cassandra“模式”

为唯一的无id数据开发Cassandra“模式”
EN

Stack Overflow用户
提问于 2011-03-24 15:38:21
回答 2查看 968关注 0票数 2

我试图为股票价格数据创建一个Cassandra模式。

每个记录都有以下字段:

  • 股票符号
  • 日期
  • 公开价格
  • 收盘价

如您所见,没有一个字段可以作为唯一标识符。

我想创建这样的东西:

代码语言:javascript
复制
Stocks { // column family
    ????? { //row key - unique id
        symbol: 'GOOG'        // column  -- secondary index
        date: '2005/01/01'    //column   -- secondary index
        open: '500'           //column
        close: '501'          //column
    }
}

正如你所看到的,我想利用卡桑德拉0.7中的次级索引特征

当将数据插入数据库时,是否应该为每个记录创建一个TimeUUID?这似乎是最直截了当的路线。

注:我不是在金融业工作,我只是用这个数据集来把我的思想围绕在卡桑德拉身上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-29 22:54:08

答案取决于您将如何使用数据。根据您所指示的索引,我假设您希望按符号和数据进行搜索。我将进一步假设您希望能够获得给定日期的数据列表或给定符号的日期/统计数据。股票数据是静态的,所以我们不需要担心我们的模式是可更新的。

我们可以在这里使用一个列家族,我们将其称为'StockData‘。每个符号都有一行,每一个日期也是如此。因此,对于上述记录,您将拥有'GOOG‘和'2005/01/01’的键。

对于第一种类型的键(符号),您的列名将类似于'2005/01/01- start‘和'2005/01/01- end’,其中列值是开始值和结束值。

对于第二种类型的键(日期),您的列名应该是“GOOG”和“GOOG”。同样,开始值和结束值将作为列值存储。

为了说明:

代码语言:javascript
复制
Column Family: StockData
------------------------------------------------------------------------------------
GOOG       | 2005/01/01-start | 2005/01/01-end |  2005/01/02-start | 2005/02/01-end | 
           |      500         |      501       |         501       |     600        |

APPL       | 2005/01/01-start | 2005/01/01-end |  2005/01/02-start | 2005/02/01-end | 
           |      354         |      360       |         360       |     100        |

2005/01/01 |    GOOG-start    |     GOOG-end   |      APPL-start   |     APPL-end   |
           |        500       |       501      |         354       |       360      |

2005/01/02 |    GOOG-start    |     GOOG-end   |      APPL-start   |     APPL-end   |
           |        501       |       600      |         360       |       100      |

现在,您可以使用符号行上的get_slice函数为符号(按日期排序)选择全部或一些统计数据。类似地,您可以获得一天的一些或所有统计数据(按符号排序)。

有了NOSQL系统,您的数据结构的方式几乎和开发人员一样多。这不是唯一的办法。只是为了让你开始。

票数 2
EN

Stack Overflow用户

发布于 2011-04-13 22:09:25

您需要精确地解释您想要运行的查询--因为Cassandra没有灵活的查询语言,所以必须构造适合特定查询的模式。

您可以使用股票符号作为唯一的行键,然后添加以日期作为列名的列,并将开始和结束价格打包为复合值。

GOOG -> {'2005/01/01':'354-360'} {'2005/01/02':360-100}

但这不会给你提供有用的二级索引。

正如字符串-文字所暗示的,您可以使用复合列名来代替:

GOOG -> {‘2005/01/01-开始’:354}{‘2005/01/01-结束’:360}

这将允许对价格进行二级索引(但这在示例数据集中并不是很有用)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5421702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档