You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/06/14 01:51:53 UTC
[james-project] branch master updated: [PERFORMANCE] Reduce
Cassandra chunk length for some read intensive tables
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new b9ef0e6 [PERFORMANCE] Reduce Cassandra chunk length for some read intensive tables
b9ef0e6 is described below
commit b9ef0e6316f8ccd71f80f94d25222e9442055360
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sat Jun 5 19:15:56 2021 +0700
[PERFORMANCE] Reduce Cassandra chunk length for some read intensive tables
- The table should be read heavy
- Have a small PARTITION size
Reducing the compression chunk size reduces the amount of data Cassandra have to
pull and deflate, at the expense of a lower compression and of more object creation.
The proposed values lead to a net performance improvement both for mean and p99
response time (106 ms mean time for JMAP queries to 85ms)
Testing infrastructure: 2*2 CPU James with 4GB RAM, 3 Cassandra being OVH B2-30,
~900 requests per second
---
.../apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java | 3 ++-
.../apache/james/mailbox/cassandra/modules/CassandraMessageModule.java | 1 +
.../apache/james/blob/cassandra/cache/CassandraBlobCacheModule.java | 1 +
.../projections/CassandraMessageFastViewProjectionModule.java | 3 ++-
4 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
index 98568ba..f127373 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
@@ -42,7 +42,8 @@ public interface CassandraMailboxModule {
.comment("Holds the mailboxes information.")
.options(options -> options
.caching(SchemaBuilder.KeyCaching.ALL,
- SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+ SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))
+ .compressionOptions(SchemaBuilder.lz4().withChunkLengthInKb(8)))
.statement(statement -> statement
.addPartitionKey(CassandraMailboxTable.ID, timeuuid())
.addUDTColumn(CassandraMailboxTable.MAILBOX_BASE, SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE))
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
index e7c36c6..6b51570 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
@@ -68,6 +68,7 @@ public interface CassandraMessageModule {
.comment("Holds mailbox and flags for each message, lookup by message ID")
.options(options -> options
.compactionOptions(SchemaBuilder.sizedTieredStategy())
+ .compressionOptions(SchemaBuilder.lz4().withChunkLengthInKb(8))
.caching(SchemaBuilder.KeyCaching.ALL,
SchemaBuilder.rows(CACHED_IMAP_UID_ROWS)))
.statement(statement -> statement
diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobCacheModule.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobCacheModule.java
index 3f8fa12..d6e63a9 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobCacheModule.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobCacheModule.java
@@ -40,6 +40,7 @@ public interface CassandraBlobCacheModule {
.compactionOptions(SchemaBuilder.timeWindowCompactionStrategy()
.compactionWindowSize(1)
.compactionWindowUnit(HOURS))
+ .compressionOptions(SchemaBuilder.lz4().withChunkLengthInKb(8))
.readRepairChance(NO_READ_REPAIR))
.comment("Write through cache for small blobs stored in a slower blob store implementation.")
.statement(statement -> statement
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
index 0f50a60..4772cd0 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
@@ -36,7 +36,8 @@ public interface CassandraMessageFastViewProjectionModule {
CassandraModule MODULE = CassandraModule.table(TABLE_NAME)
.comment("Storing the JMAP projections for MessageFastView, an aggregation of JMAP properties expected to be fast to fetch.")
.options(options -> options
- .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(DEFAULT_CACHED_ROW_PER_PARTITION)))
+ .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(DEFAULT_CACHED_ROW_PER_PARTITION))
+ .compressionOptions(SchemaBuilder.lz4().withChunkLengthInKb(8)))
.statement(statement -> statement
.addPartitionKey(MESSAGE_ID, uuid())
.addColumn(PREVIEW, text())
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org