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

这种时序数据vs sql server,Cassandra是个好选择吗?

柯镜
2023-03-14

考虑这种情况,我们收集金融市场数据(例如资金价格)并将其存储在sql表中。

正常情况下基金价格每天最多上涨一次,因此该表可以是:

FundId  Date       Price1     Price2

当我们想要一些数据时,一个简单的查询就可以了:

select Date, Price1, Price2 from FundPriceTable where Date between  XX and XX

然而,随着我们收集的数据越来越多,上述查询性能开始下降。我们尝试了重新索引和刷新统计数据。问题是,当我们检索大量数据时(例如,获取1000只基金的10年历史),可能需要相当长的时间。

我想知道在这种情况下(根本没有加入),像Cassandra这样的系统会显示出任何性能优势(假设相同的硬件)吗?

我试图在卡桑德拉和sql服务器之间找到一些关于时间序列的基准文章,不幸的是没有找到任何东西。

共有1个答案

子车煌
2023-03-14

取决于您的模式。性能提升取决于您的分区键。在你的例子中:你可以按日或月分割你的数据。这个例子是按月份划分的:

fundPricesByDay (month int, timestamp timestamp, productId text, Price1 float, Price2, PRIMARY KEY(month, timestamp, productId)) 

如果需要第一个月和第三个月之间的所有数据,可以执行3个查询:

select * from fundPricesByDay where month = 1 AND timestamp > 60000;
select * from fundPricesByDay where month = 2;
select * from fundPricesByDay where month = 3 AND timestamp < 99999;

通过这三个查询,您将获得时间戳60000到99999之间的所有数据。但是您在不同的vNodes上执行所有的查询。这意味着每个节点必须处理的行数比sql少。它可以提升性能。多读一点关于Cassandra的工作原理,你就会明白如何提升你的牌桌。

您明确要求相同的硬件。也许没有性能提升。简单地对它进行基准测试。但在可扩展性和性能的结合上,Cassandra肯定会赢。SQL有其局限性(取决于硬件,集群是可能的,但实现起来很复杂,也有其局限性),Cassandra在可伸缩性和性能方面没有这种局限性。(或者更好:当你有一个好的模式时,真的很难达到极限。)

 类似资料:
  • 这是选择排序吗?我认为这是泡泡排序,因为我使用的是(点)compareto。我在互联网上看不同的来源,所以我可以做一个。这是密码。

  • 问题内容: 在回答这个问题时,我和其他一些人实际上认为是错误的,因为认为以下方法可行: 说一个有 背后的原因是什么 而有一个 要么 要么 是造成尺寸 退化的 原因吗? 问题答案: 是对象dtype的2D数组,每行的第一个元素是一个列表。 是对象dtype的一维数组,其每个元素都是列表。 当您这样做时,NumPy不会对list的每个元素进行元素比较。它从中创建尽可能高维的数组,生成1D数组,然后广播

  • 问题内容: 我目前正在一个项目中,该项目需要保留任何类型的对象(我们没有任何控制权的实现),以便以后可以恢复这些对象。 我们无法实现ORM,因为我们不能在开发时限制我们库的用户。 我们的第一个选择是使用Java默认序列化对其进行序列化,但是当用户开始传递同一对象的不同版本(属性更改的类型,名称等)时,恢复对象存在很多麻烦。 我们尝试使用XMLEncoder类(将对象转换为XML),但是发现缺少功能

  • 我正在研究一个用于存储时间序列的卡桑德拉数据模型(我是卡桑德拉新手)。我有两个应用程序:日内股票数据和传感器数据。 库存数据将以一分钟的时间分辨率保存。七个数据字段构建一个时间框架:符号、日期时间、开盘、高位、低位、收盘、成交量 我将主要通过符号和日期来查询数据。例如,给我2013年1月1日到2013年1月31日之间按日期时间排序的AAPL的所有数据。cassandra查询的建议是查询整列。所以你

  • 我有一个可以包含多个可选ID的类,该类将选择第一个可用ID并将其返回给调用方。像下面这样。 我想使用像map和orElse这样的可选方法,但在这种情况下,它会导致太多的嵌套。另外两个伪代码选项可能是。 有没有比我现有的方法更好的方法?我很想通过做香草isPresent()检查来避免嵌套。