- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想比较 PostgreSQL 和 Cassandra 在单个节点上 的读取性能。
我有一个 8 列、150000 行的表格。为了将其转换为列族,我将主键设为 Cassandra 中的行键,其余列与 PostgreSQL 中的一样。此外,我将数据批量加载到 Cassandra SSTables 中,因此两者的数据都在磁盘上。
从 PostgreSQL 读取表:
select * from tableName;
耗时 200 毫秒左右。
为了读取列族(启用 keycache 和 rowcache),我尝试了 thrift API(get_range_slices 方法)和 CQL2.0。前者平均耗时 7000ms 左右,后者则达到了难以忍受的 100000ms。
我知道如果从 Cassandra Memtables 读取数据会非常快。但既然它们都从磁盘读取,为什么 Cassandra 慢得多?
哪些底层机制至关重要?
编辑:
客户专栏族
CREATE COLUMN FAMILY customer
WITH comparator = UTF8Type
AND key_validation_class = UTF8Type
AND caching = all
AND column_metadata =
[
{column_name: C_NAME, validation_class: UTF8Type},
{column_name: C_ADDRESS, validation_class: UTF8Type},
{column_name: C_NATIONKEY, validation_class: UTF8Type},
{column_name: C_PHONE, validation_class: UTF8Type},
{column_name: C_ACCTBAL, validation_class: UTF8Type},
{column_name: C_MKTSEGMENT, validation_class: UTF8Type},
{column_name: C_COMMENT, validation_class: UTF8Type}
];
这是我的节俭查询
// customer is that column family of 150000 rows
ColumnParent cf1 = new ColumnParent("customer");
// all columns
SlicePredicate predicate = new SlicePredicate();
predicate.setSlice_range(new SliceRange(ByteBuffer.wrap(new byte[0]), ByteBuffer.wrap(new byte[0]), false, 100));
// all keys
KeyRange keyRange = new KeyRange(150000);
keyRange.setStart_key(new byte[0]);
keyRange.setEnd_key(new byte[0]);
List<KeySlice> cf1_rows = client.get_range_slices(cf1, predicate, keyRange, ConsistencyLevel.ONE);
还有我的 CQL2.0 查询:
select * from customer limit 150000;
编辑:
怪我标题误导,提供的数据可能会带来更多的争议。我不是在这里挑选赢家。
它们都在进行磁盘 I/O(这不是 Cassandra 的典型用例)并且它们的时间不同,所以一定是有原因的。我很好奇他们处理这个问题的方式。因此,如果你们能阐明基 native 制,我将不胜感激。
这不是苹果对苹果的比较,但我关心的是味道。一种可能更酸,因为它含有更多的维生素 C。这对我来说很重要。
谢谢。
最佳答案
这不是针对 Cassandra 的有效测试,因为 Postgres 和 Cassandra 并非旨在解决相同的问题。完整的 CF 扫描不是真实世界的查询,如果您在生产系统中执行此操作,您将使用 Hadoop 而不是通过 Thrift 执行此操作。用于检索大量数据的更现实的 Cassandra 测试是列切片,您可以在其中检索给定键集的从 A 到 n 的一系列列。这是一种更高效的操作,也是更适合 Cassandra 的数据模型选择。此外,没有人在单个节点上运行 Cassandra; 3 个节点是最低配置。
如果你想测试完整的扫描功能,使用 Thrift(在你的情况下通过 CQL)不是这样做的方法,因为你的所有结果都必须适合 RAM 并立即通过线路序列化(即有没有游标)。如果您的所有数据都可以放入 RAM,那么 Cassandra 不是您的正确选择。将 Hadoop 与 Cassandra 结合使用,您可以并行化完整扫描并在几秒钟内回答有关理论上无限量数据的问题——这是 Postgres 无法做到的。如果您想详细了解其工作原理,请查看 Cassandra 的 Hadoop 包中的 RangeClient
。还值得注意的是,完整扫描需要磁盘读取,而许多常见的读取模式使用缓存并且从不访问磁盘。
相比之下,Cassandra 在列范围查询或按键获取方面非常快。这是因为键被散列到特定节点,然后在写入时按列名排序。因此,如果您知道您的键和/或想要一系列连续的列(一种非常常见的 Cassandra 读取模式),那么最坏的情况下您将获得顺序 I/O,最好的情况下获得缓存数据——没有锁定或间接(即索引)。
关于postgresql - Cassandra 如何处理磁盘 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12616699/
我们有 2 个 cassandra 集群,第一个有旧数据,第二个有新数据。 现在我们想要将旧数据从第一个集群移动或复制到第二个集群。什么是最好的方法来做到这一点以及如何做到这一点? 我们正在使用 DS
我正在考虑安装 OpsCenter 来监控我们在 RackSpace VM 上运行的 24 节点 Cassandra 集群。过去我听说 OpsCenter 减慢了集群速度。我有点担心 OpsCente
假设我有一个复制因子(RF)= 2 的 2 节点集群。 我使用一致性 2 触发插入。当客户端等待响应时,Cassandra 开始写入这 2 个节点。中间一个节点失败,无法完成写入,而另一节点上的写入成
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足 Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以
我在 Cassandra 中有一个表,其中我用 1000 多个条目填充了一些行(每行有 10000 多列)。行中的条目更新非常频繁,基本上只是一个字段(它是一个整数)被更新为不同的值。列的所有其他值保
当Cassandra端有“掉落的突变”时,它是否向调用客户端返回相应的失败?或者即使在服务器端丢弃相应的突变并导致数据丢失,它总是成功响应调用事务的调用客户端? 在一个特定实例中,当我们的 TPS 约
我有一个 Multi-Tenancy 应用程序,其中 tenantId 将成为每个查询的一部分,因此我将其放入所有表的分区键中。 例子: CREATE TABLE users { tenantId t
根据 Datastax 文档,在 Cassandra 中先读后写是一种反模式。 每当我们在 CQLSH 中使用 UPDATE 或使用 Datastax 驱动程序来设置几列(带有 IF 和集合更新)时,
是否有命令或任何方式可以知道 Cassandra 的哪些节点上存储了哪些数据? 我对 Cassandra 很陌生,在谷歌上搜索这个问题并没有多少运气。 谢谢! 最佳答案 您可以使用 nodetool
我们有一个包含 1500 万条记录的表,而我们的表是一个 10 节点的 cassandra 集群。我们有一列有接近 20 个可重复值。是否建议在此列上建立二级索引? 最佳答案 假设在该列上完全均匀分布
Cassandra 发布了它的 technical limitations但没有提到允许的最大列数。是否有最大列数?我需要存储 400 多个字段。这在 Cassandra 中可能吗? 最佳答案 每行的
我想知道当表中有多个非 PK 列时会发生什么。我读过这个例子: http://johnsanda.blogspot.co.uk/2012/10/why-i-am-ready-to-move-to-cq
我有两个关于 Cassandra 查询结果的问题。 当我在 Cassandra 中对表进行“完全”选择(即 select * from table )时,是否保证结果将按分区标记的递增顺序返回? 例如
我无法为 Cassandra 设置 Hector。我已经浏览了 documentation和 Cassandra wiki .这些文档的问题在于,那里的很多信息都已经过时或过时(或者我缺乏知识)。无论
我正在使用 DataStax Enterprise 中 cassandra 中提供的压力测试。如果有人知道的话,我也想要一些关于它和 cassandra 的信息。 - 首先,压力测试使用哪些节点?我的
当我在 CQL 中创建表时,列的顺序是否必须精确 不是 在主键和 中不是 聚类列: CREATE TABLE user ( a ascii, b ascii, c ascii,
我有一张如下表: CREATE TABLE tab( categoryid text, id text, name text, author text, des
我正在尝试学习 Cassandra,但对术语感到困惑。 很多情况下它表示该行存储键/值对。 但是,当我定义一个表时,它更像是声明一个 SQL 表,即;您创建一个表并指定列名和数据类型。 谁能澄清一下?
如何对 cassandra 数据实现审计? 我正在寻找一个开源选项。 cassandra 是否有任何有助于审计的功能? 我可以使用触发器将记录记录到表中吗?我关注了 Triggers示例并且能够将记录
我遇到了一个问题“me.prettyprint.hector.api.exceptions.HUnavailableException:: 可能没有足够的副本来处理一致性级别。”当我有 RF=1 时,
我是一名优秀的程序员,十分优秀!