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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]