- MemSQL is transactional and writes transactions on disk
- MemSQL has an excellent implementation of SQL with mature query optimization and query execution. And it get better every release. This is from 6.5 https://www.memsql.com/blog/6.5-performance/
- MemSQL has in-memory and on-disk data storage so you can use MemSQL to store petabytes
- MemSQL has columnstores and vectorized query processing: https://news.ycombinator.com/item?id=16617098
- MemSQL supports geospatial, fulltext search, and json
- MemSQL allows you to stream data from kafka in one command: https://docs.memsql.com/sql-reference/v6.5/create-pipeline/
Genuinely not intended as snark, I'm just curious why memsql is so compelling that I would consider it.
All things being equal, I agree that open source solutions are the best. Things are just not always equal.
Truth be told, the list if features is not very compelling. I mean, JSON support is not a reason to pick a commercial dbms over a FLOSS one.
- In-memory row stores. Super fast for updates and point lookups
- Memory optimized hash joins that minimized cash misses. Great for analytical/reporting use cases
- Vectorization for columnstore query processing. Super fast aggregations that work best when data is cached in memory
Beyond those considerations, why would the same exact same query (executed several times in rapid succession from the console) produce vastly different results? Also, I should clarify, rewriting the query from "select ... from xyz group by ... having ..." to "select ... from (select * from xyz where ...) group by ..." made the inconsistency goes away, without changing the filtering clause. That does not inspire confidence.
select count(*), a from T group by a having b > 0
In this case b is not allowed to be part of having by ANSI standard.We let it run b/c some customers migrate from MySQL and MySQL allows this query. You can set MemSQL to be strict about it by setting this variable:
set session sql_mode = only_full_group_by;MemSQL is a distributed full-featured relational database that has in-memory rowstore and on-disk columnstore tables with rich support for SQL, fulltext search and JSON. It's a fast RDBMS and does really well with analytical queries.
Do you need a fast cache, key/value, messaging system? Or a RDBMS with fast OLTP + OLAP capabilities?
Column-oriented storage itself is many times faster for analytical queries, even if on disk, and combined with the other optimizations of MemSQL will get you far better performance. Along with all the data being able to constantly undergo transactional updates.