Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a blog post for v1.10 #3346

Merged
merged 18 commits into from
Sep 15, 2023
Merged
Prev Previous commit
Next Next commit
Add images
  • Loading branch information
AlekSi committed Sep 14, 2023
commit 7b5a6387200223356072e0c70db7ae10afcf92c4
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
---
slug: ferretdb-v1-10-production-ready-sqlite
title: FerretDB v1.10.0 – Production-ready SQLite support and more
title: FerretDB v1.10 – Production-ready SQLite support and more
authors: [aleksi]
description: >
We are happy to announce the full support for the SQLite backend and discuss our new architecture.
image: /img/blog/post-cover-image.jpg
image: /img/blog/post-cover-image.jpg # FIXME
AlekSi marked this conversation as resolved.
Show resolved Hide resolved
tags: [release]
unlisted: true
---

<!-- FIXME banner image -->
AlekSi marked this conversation as resolved.
Show resolved Hide resolved

We are happy to announce the full support for the SQLite backend and discuss our new architecture.
We just released the new version of FerretDB – v1.10, which is [available in the usual places](https://docs.ferretdb.io/quickstart-guide/).
With it, the SQLite backend support is officially out of beta, on par with our PostgreSQL backend, and fully supported.

<!--truncate-->

We just released the new version of FerretDB – v1.10.0, which is [available in the usual places](https://docs.ferretdb.io/quickstart-guide/).
With it, the SQLite backend support is officially out of beta, on par with our PostgreSQL backend, and fully supported.
In the past two weeks, we added support for many missing commands and features,
including aggregation pipelines, indexes, query explains, and collection renaming.
Please refer to the [full release notes](https://github.com/FerretDB/FerretDB/releases/tag/v1.10.0) for details.
Please refer to the [full release notes](https://github.com/FerretDB/FerretDB/releases/tag/v1.10.1) for details.
There are still opportunities for improvement, such as support for more [query pushdowns](https://docs.ferretdb.io/pushdown/),
but they will not break the compatibility.
You can start to use the SQLite backend in production now!
Expand All @@ -36,7 +34,7 @@ When FerretDB (née MangoDB) was [first released](2021-11-05-mangodb-overwhelmin
it supported a single PostgreSQL backend.
The simplified version of the architecture looked like this:

FIXME image
![Old MangoDB architecture](/img/blog/new-arch/image1.png)

The protocol handling module was (and still is) responsible for handling client connections, MongoDB wire protocol,
and BSON documents encoding/decoding.
Expand All @@ -45,14 +43,14 @@ The commands handling module was responsible for handling protocol commands such
Over time, we understood that there is some common code between command handlers.
We extracted a part responsible for accessing PostgreSQL and running queries into the backend package:

FIXME image
![Old FerretDB architecture](/img/blog/new-arch/image2.png)

When we added another backend, we could not figure out if there was a common interface for different storages as they were so different.
So we decided to make another commands handling module that was similar in things like command parameters extraction
but very different in the way it interacted with storage.
Similar parts were extracted into a set of common packages:

FIXME image
![FerretDB with Tigris architecture](/img/blog/new-arch/image3.png)

Over time the common part grew, but we still had very different backend packages.
When we decided to add SQLite support, we wanted to revisit our previous decisions –
Expand All @@ -63,7 +61,7 @@ At the same time, we had a lot of practical knowledge of how FerretDB is used wi
what is important and what is not, and what problems the current backend has and how to avoid them.
So we settled on this architecture:

FIXME image
![FerretDB with SQLite architecture](/img/blog/new-arch/image4.png)

The common backend interface is relatively small to make it easy to add new backends.
For example, there is a single method that backends should implement to insert given documents.
Expand All @@ -76,10 +74,7 @@ Then the command handler could check if that method is implemented by the curren
That architecture also allows us to add optional functionality to all backends at once.
For example, there is already a _very early_ prototype of the OpLog functionality.
It works by wrapping `insert`, `update`, and `delete` methods of any backend and inserting documents
into operation log collection when wrapped methods succeed:

FIXME image

into operation log collection when wrapped methods succeed.
The more advanced backend-specific methods of implementing that functionality could be implemented if needed.
For example, PostgreSQL could use triggers for achieving better performance.
That leads us to the discussion of the FerretDB future.
Expand All @@ -90,7 +85,7 @@ We will continue working on the SQLite backend, improving performance and compat
We will continue working on the soon-to-be-only commands handler module.
And we just started working on the new PostgreSQL backend:

FIXME image
![New FerretDB architecture](/img/blog/new-arch/image5.png)

We don't plan to introduce any breaking changes there.
AlekSi marked this conversation as resolved.
Show resolved Hide resolved
Soon you will be able to update FerretDB to the latest version that will use the same data layout in PostgreSQL,
Expand Down
3 changes: 3 additions & 0 deletions website/static/img/blog/new-arch/image1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions website/static/img/blog/new-arch/image2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions website/static/img/blog/new-arch/image3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions website/static/img/blog/new-arch/image4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions website/static/img/blog/new-arch/image5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.