当前位置: 首页 > 知识库问答 >
问题:

存储在Cassandra中的流式金融时间序列-性能差

陶星渊
2023-03-14

我们正在评估Cassandra用于金融时间序列数据的过程中,并试图了解以最高效的方式存储和检索我们需要的数据的最佳方法。我们在一个虚拟机上运行Cassandra,该虚拟机上已经分配了8个内核和8GB RAM。主机的剩余资源(另外8个内核和12GB RAM)用于开发测试客户机应用程序。我们的数据目前存储在平面文件中,每天大约有100-150GB(未压缩)。就从cassandra检索数据而言,我们需要能够流式传输:

    null
create table MarketData (
Security text
,Date date
,Timestamp timestamp
...
other columns
...
primary key((Security,Date),timestamp));
var ps = client.Session.Prepare("select security, date, timestamp, toUnixTimestamp(timestamp), from marketdata where security = ? and date = ?");
int pageSize = 450;
var statement = ps.Bind("AAPL_O",new LocalDate(2016,01,12)).SetPageSize(pageSize);
stopwatch.Start();
var rowSet = client.Session.Execute(statement);
foreach (Row row in rowSet)
{
}
stopwatch.Stop();

此外,这种模式在跨分区(即多个证券)选择排序数据方面也会有问题,因为它涉及到跨分区排序,而Cassandra似乎不太适合这一点。

我们还将基于minute的partinioning与以下模式结合起来:

创建表MarketData(年int、月int、日int、小时int、分钟int、安全文本、Timestamp时间戳...其他列...主键(年、月、日、小时、分钟)、时间戳);

谢谢

共有1个答案

祁修平
2023-03-14

“...表现不佳...”

“我们正在虚拟机上运行Cassandra”

我想这两个突出显示的词是相关的:).出于好奇,你的硬盘是什么性质的?共享存储?SAN?旋转磁盘?SSD?双向硬盘?

对于虚拟机和虚拟化存储,您将停用所有针对磁盘吞吐量的Cassandra优化。在虚拟化磁盘上连续写入数据块并不能保证数据被有效地按顺序写入,因为管理程序/虚拟磁盘控制器可以对数据进行重新排序,以便在实际物理磁盘上的几个块上进行拆分

虚拟机上的Cassandra部署只适用于P.O.C验证数据模型和查询。您需要有专用的物理硬盘来用Cassandra对数据模型的实际性能进行基准测试。

 类似资料:
  • 我是Cassandra的新手,我想在Cassandra中存储加权图的时间序列,其中边权值随时间而增加,但也随时间而更新。例如, 我的第一个镜头涉及两个CQL v3表: 这个策略有什么可怕的低效吗?应该怎么做?我已经知道表2的更新过程不是幂等的,可能会导致不一致,但我暂时可以接受这一点。 edit:我可以做的一件事是将这两个表合并到一个时间序列表中。

  • 问题内容: 我需要将一些时间序列数据存储到Redis中。我有unix时间戳,并且我需要关联一个值(时间戳<->值) 我尝试将时间戳记作为得分(以便我可以在时间戳记上进行zrange)并将值作为成员的排序集。 但是我遇到了一个问题,成员没有重复,而对于不同的时间戳,我的值可以相同。知道如何处理吗?其他数据类型更好吗? 问题答案: 解决此问题的一个简单技巧是将时间戳记和值连接起来。 而不是存储: 您可

  • 或者,如果有一个更好的方式或存储事件的时间序列数据。

  • 我有许多python进程,每个进程都重复查询一个单独的投注API。请求一次以~20-100的突发形式出现,然后该过程消失以解析响应并在大约一秒后重复。我希望使用卡桑德拉作为我的请求和响应的原始存储。这将允许我调试解析数据的问题和/或稍后重新解析。我正在尝试为此设计一个架构。 我想每个API都可以有一个单独的表(列族),这一点没什么可说的。我对表模式的最初想法是: 然后,我可以在请求和响应发生时将它

  • 我将我的数据存储在卡珊德拉·NoSQL数据库中,模式如下: 然后我使用。我希望数据是按时间序列排列的,第一天确实如此,但今天情况发生了变化。 我认为数据库忽略了日期,而只关心时间。 知道怎么解决这个问题吗?

  • 我正在尝试设计一个新的应用程序,它使用Cassandra而不是传统的SQL数据库。集群和水平扩容功能对我的用例特别有用。 我有这样的情况,我有多个记录,它们可能彼此非常不同。例如,如果我存储不同的运动信息,对于足球,我会存储两支球队、球员、半场和全场比赛后的结果、红牌、黄牌等信息,而如果是网球比赛,则会存储两名对手、盘数等信息。 我不希望每个运动都有一个表(有负载),并且希望能够添加新的运动,而不