I posted a StackOverflow post here, where I initially wanted to know why Couchbase was so slow. Then I added benchmarking for Aerospike, when I heard about this product.
However, Aerospike was on-par with Couchbase in reads, and slower in writes, meaning: its very slow compared to Redis and even MySql that is persisted on an SSD drive. The details are in the SO post, here are the results:
We are inserting 100 000 JSON “documents” into three db/stores:
- Redis (just insert, there is nothing else)
- Couchbase (in-memory Ephemeral buckets, JSON Index on JobId)
- MySql (Simple table; Id (int), Data (MediumText), index on Id)
- Aerospike (in-memory storage)
The JSON file is 67 lines, about 1800 bytes.
INSERT:
- Couchbase: 60 seconds
- MySql: 30 seconds
- Redis: 8 seconds
- Aerospike: 71 seconds
READ: We are reading 1000 times, and we do this 10 times and look at averages.
- Couchbase: 600-700 ms for 1000 GETs (Using KeyValue operations, not Query API. Using Query API, this takes about 1500 ms)
- MySql: 90-100 ms for 1000 GETs
- Redis: 50-60 ms for 1000 GETs
- Aerospike: 750 ms for 1000 GETs
Conclusion: Aerospike is slowest, closely followed by Couchbase. Both of these are using in-memory storage (Couchbase => Ephemeral bucket, Aerospike => storage-engine memory).
Why is Aerospike so slow, when its all in memory?
Aerospike code:
WRITES:
sw.Restart();
foreach (JObject temp in jsonObjects)
{
aeroClient.Put(null, new Key("test", "cache", temp.GetValue("JobId").ToString()), new Bin[]
{
new Bin("Id", temp.GetValue("JobId").ToString()),
new Bin("Data", temp.ToString())
});
}
sw.Stop();
Console.WriteLine($"Adding {nbr} to Aerospike took {sw.ElapsedMilliseconds} ms");
READS:
for (int q = 0; q < 10; q++)
{
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < nbr; i++)
{
Record record = aeroClient.Get(null, new Key("test", "cache", r.Next(1, 100000).ToString()), "Data");
}
sw.Stop();
Console.WriteLine($"Aerospike Q: {q} \t{sw.ElapsedMilliseconds} ms");
sw.Reset();
}