Elasticsearch Was Never a Database
37 points
4 days ago
| 11 comments
| paradedb.com
| HN
roywiggins
2 hours ago
[-]
> Elastic has been working on this gap. The more recent ES|QL introduces a similar feature called lookup joins, and Elastic SQL provides a more familiar syntax (with no joins). But these are still bound by Lucene’s underlying index model. On top of that, developers now face a confusing sprawl of overlapping query syntaxes (currently: Query DSL, ES|QL, SQL, EQL, KQL), each suited to different use cases, and with different strengths and weaknesses.

I suppose we need a new rule, "Any sufficiently successful data store eventually sprouts at least one ad hoc, informally-specified, inconsistency-ridden, slow implementation of half of a relational database"

reply
xeraa
47 minutes ago
[-]
Funny argument on the query languages in hindsight, since the latest release (https://www.paradedb.com/blog/paradedb-0-20-0 but that was after this blog) just completely changed the API. To be seen how many different API versions you get if you make it to 15 years ;)

PS: I've worked at Elastic for a long time, so it is fun to see the arguments for a young product.

reply
esafak
50 minutes ago
[-]
reply
kayo_20211030
1 hour ago
[-]
... and then becomes an email client (https://en.wikipedia.org/wiki/Jamie_Zawinski#Zawinski%27s_La...). A two-fer. lol.
reply
speedgoose
2 hours ago
[-]
Accenture managed to build a data platform for my company with Elasticsearch as the primary database. I raised concerns early during the process but their software architect told me they never had any issues. I assume he didn’t lie. I was only an user so I didn’t fight and decided to not make my work rely on their work.
reply
kubi07
11 minutes ago
[-]
I worked in a company that used elastic search as main db. It worked, company made alot of money from that project. It was a wrong decision but helped us complete the project very fast. We needed search capability and a db. ES did it both.

Problems that we faced by using elastic search: High load, high Ram usage : db goes down, more ram needed. Luckily we had ES experts in infra team, helped us alot.(ecommerce company)

To Write and read after, you need to refresh the index or wait a refresh. More inserts, more index refreshes. Which ES is not designed for, inserts become slow. You need to find a way to insert in bulk.

Api starts, cannot find es alias because of connection issue, creates a new alias(our code did that when it cant find alias, bad idea). Oops whole data on alias is gone.

Most important thing to use ES as main db is to use "keyword" type for every field that you don't text search.

No transaction: if second insert fails you need to delete first insert by hand. Makes code look ugly.

Advantages: you can search, every field is indexed, super fast reads. Fast development. Easy to learn. We never faced data loss, even if db crashed.

reply
Andys
14 minutes ago
[-]
This is made possible because Elastic gained a write-ahead log that actually syncs to disk after each write, like Postgres.
reply
victor106
52 minutes ago
[-]
> Accenture

They messed up a $30 million dollar project big time at a previous company. My cto swore to never recommend them

reply
CuriouslyC
1 hour ago
[-]
Elastic feels about as much like a primary data store as Mongo, FWIW.
reply
PedroBatista
2 hours ago
[-]
I really never understood how people could store very important information in ES like it was a database.

Even if they don't understand what ES is and what a "normal" database is, I'm sure some of those people run into issues where their "db" got either corrupted of lost data even when testing and building their system around it. This is and was general knowledge at the time, it was no secret that from time to time things got corrupted and indexes needed to be rebuilt.

Doesn't happen all the time, but way greater than zero times and it's understandable because Lucene is not a DB engine or "DB grade" storage engine, they had other more important things to solve in their domain.

So when I read stories of data loss and things going South, I don't have sympathy for anyone involved other than the unsuspecting final clients. These people knew or more or less knew and choose to ignore and be lazy.

reply
kentm
1 hour ago
[-]
> I really never understood how people could store very important information in ES like it was a database.

I agree.

Its been a while since I touched it, but as far as I can remember ES has never pretended to be your primary store of information. It was mostly juniors that reached for it for transaction processing, and I had to disabuse them of the notion that it was fit for purpose there.

ES is for building a searchable replica of your data. Every ES deployment I made or consulted sourced its data from some other durable store, and the only thing that wrote to it were replication processes or backfills.

reply
WASDx
25 minutes ago
[-]
I've managed a 100+ node cluster for years without seeing any corruption. Where are you getting this from?
reply
vjerancrnjak
1 hour ago
[-]
They market it as a general purpose store. Successfully, even though hc cs wizards wouldn’t touch it ever, c suite likes it

Best example is IoT marketing, as if it can handle the load without bazillion shards, and since when does a text engine want telemetry

reply
gloryjulio
22 minutes ago
[-]
We only used it on top of the primary databases, just like many other components for scaling or auxiliary functionalities. Not sure how others use it
reply
lvspiff
2 hours ago
[-]
Everything is a database if you believe hard enough

Feel like the christmas story kid --

>simplicity, and world-class performance, get started with XXXXXXXX.

A crummy commercial?

reply
cluckindan
2 hours ago
[-]
”That means a recently acknowledged write may not show up until the next refresh.”

Which is why you supply the parameter

  refresh: ”wait_for”
in your writes. This forces a refresh and waits for it to happen before completing the request.

”schema migrations require moving the entire system of record into a new structure, under load, with no safety net”

Use index aliases. Create new index using the new mapping, make a reindex request from old index to new one. When it finishes, change the alias to point to the new index.

The other criticisms are more valid, but not entirely: for example, no database ”just works” without carefully tuning the memory-related configuration for your workload, schema and data.

reply
nkmnz
1 hour ago
[-]
It took me years before I started tuning the memory-related configuration of postgres for workload, schema and data, in any way. It "just works" for the first ten thousand concurrent users.
reply
cluckindan
1 hour ago
[-]
Well, most people working on a car don’t have a car lift: it only makes sense when you need to safely work on a large volume of cars. If you only work on one or two, a jack and a pile of wood works just fine.
reply
_joel
1 hour ago
[-]
reply
kamma4434
1 hour ago
[-]
Modern JVMs are pretty effective in most scenarios right out of the box.
reply
toenail
2 hours ago
[-]
I think elastic always clearly documented to expect "eventual consistency", they never claimed to be a "database" in the sense that tfa defines.
reply
xeraa
56 minutes ago
[-]
First step of a marketing campaign: Claim something never said and then tell everyone why it's wrong ;)
reply
cess11
20 minutes ago
[-]
It's not so much that Elastic is saying it as a lot of people doing the supposed wrong the advert-article describes.

I've seen some examples of people using ES as a database, which I'd advise against for pretty much the reasons TFA brings up, unless I can get by on just a YAGNI reasoning.

reply
jamesgresql
4 days ago
[-]
I know it sounds obvious, but some people are pretty determined to us it that way!
reply
gmuslera
17 minutes ago
[-]
... for a particular, opinionated definition of what a database should be.
reply
stefanon
1 hour ago
[-]
Yep!
reply
this_user
1 hour ago
[-]
I mean, it is called "ElasticSEARCH", not "Elasticdatabase".
reply
_joel
1 hour ago
[-]
MySQL isn't mine either, it's Larry Ellison's.
reply
unethical_ban
2 hours ago
[-]
I work in infosec and several popular platforms use elasticsearch for log storage and analysis.

I would never. Ever. Bet my savings on ES being stable enough to always be online to take in data, or predictable in retaining the data it took in.

It feels very best-effort and as a consultant, I recommend orgs use some other system for retaining their logs, even a raw filesystem with rolling zips, before relying on ES unless you have a dedicated team constantly monitoring it.

reply
toenail
2 hours ago
[-]
Dunno, I've had three node clusters running very stable for years. Which issues did you have that require a full team?
reply
PedroBatista
2 hours ago
[-]
Even most toy databases "built in a weekend" can be very stable for years if:

- No edge-case is thrown at them

- No part of the system is stressed ( software modules, OS,firmware, hardware )

- No plug is pulled

Crank the requests to 11 or import a billion rows of data with another billion relations and watch what happens. The main problem isn't the system refusing to serve a request or throwing "No soup for you!" errors, it's data corruption and/or wrong responses.

reply
toenail
1 hour ago
[-]
I'm talking about production loads, but thanks.
reply
pixl97
47 minutes ago
[-]
Production loads mean a lot of different things to a lot of different people.
reply
unethical_ban
2 hours ago
[-]
To be fair, I think it is chronically underprovisioned clusters that get overwhelmed by log forwarding. I wasn't on the team that managed the ELK stack a decade ago, but I remember our SOC having two people whose full time job was curating the infrastructure to keep it afloat.

Now I work for a company whose log storage product has ES inside, and it seems to shit the bed more often than it should - again, could be bugs, could be running "clusters" of 1 or 2 instead of 3.

reply
xeraa
53 minutes ago
[-]
There are no 2-node clusters (it needs a quorum). If your setup has 2-node clusters, someone is doing this horribly wrong.
reply
toenail
2 hours ago
[-]
I'm not even sure "get overwhelmed" is a problem, unless you need real time analytics. But yeah, sounds like a resources issue.
reply
kentm
1 hour ago
[-]
Do you happen to know if ES was the only storage? Its been almost 8 years, but if I was building a log storage and analysis system, then I'd push the logs to S3 or some other object store and build an ES index off of that S3 data. From the consumer's perspective, it may look like we're using ES to store the data, but we have a durable backup to regenerate ES if necessary.
reply
cyberpunk
1 hour ago
[-]
Meh i run hundreds of es nodes, its gotten a lot more friendly these days, but yes it can be a bit unforgiving at times.

Turns out running complicated large distributed systems requires a bit more than a ./apply, who would have guessed it?

reply