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