Migrating Databases
June 3rd, 2025

PRE INFORMATION

We used Appwrite a month ago, because we thought it'd be easier to just use a single service for all of the cloud, function, and database work.

Maybe we were wrong...

THE ISSUES

Using Appwrite was not a big issue, normally. It is really nice to have auth, database, file storage, and functions all in one singular service. The thing that we did not really think about however was, whether or not even appwrite was suitable for usage in production.


Appwrite is even to this day in their Beta Phase (3rd June, 2025), and it shows. Many issues within their GitHub repo, many missing features and not enough usage like SQL databases, which have every problem multiple times within one 6 year old reddit thread. Its just that, Appwrite is really fresh, and it seems to have a really bright future, but it needs to still get used more, so more problems are talked about more often so they get fixed!


I remember staring at my code, and thinking to myself; "Why do I try to make it work using appwrite?". Because we switched to GoLang, which also does not really have that big of an eco-system, it has gotten more difficult. The thing that did it for me however was the small feature set for the file storage, more specifically, I needed folders for clean organizing. But, Appwrite does not have that. So I thought to myself, what the hell, lets move away.


THE MIGRATION

Bunny NET, is one of, if not the best, file storage provider that I have ever used. The CDNs are fast as hell, and they really are very generous with the payments you need.

Turso is also a new kid on the block when it comes to databases, and their new libSQL engine, whilst its new, still uses SQLite under the hood, which has a wide variety of support, which is why I chose that.

But, what did I try beforehand?

ATTEMPTS

Before I went with Bunny NET, I tried other providers. A lot.

I began with trying to use backblaze. They seemed legit, and pretty well-known, also had a lot of support for a wide variety of languages, meaning that most of the issues I would have probably had, are already solved online. Even after installing I found out that I get a little bit of free storage. I programmed everything into my GoLang API, and tested it out. The file uploads worked perfectly. But when it comes to viewing the files, well, that is where the issue started.

Backblaze did not allow us to display the files we store unless we explicitly paid x dollars per month. I cannot remember the price, but it probably was something above 5. The reason why I did not want to pay that money, is not only because im greedy asf, but also because I know that I will not have a lot of users to begin with, meaning the money I pay will be for MBs of storage.

So I tried Wasabi, which is a hot file storage provider (idk what the hot stands for). It gave me TB of free file storage data, and it worked well too. But the config for it was just, not well enough. Not that much support for coding, atleast not enough for me, which is why I dropped it.

So I was between Cloudinary and Bunny Net. The reason why I chose Bunny NET however, is that I expect a lot of users, and cloudinary does give me 20GB of free storage with their free credits, the other credits cost a lot. Bunny NET has a pay-as-you-go plan, meaning I barely pay 1/1000th of a dollar for my storage usage. Think about it.
0.01$ per GB, and currently I have 15.6MB of storage. That is less than 1/10000th of a dollar.

So the answer was obvious, Bunny NET.


And well I chose Turso out of sheer luck. I saw it, and tried it. No complaints, with one of the best DB providers I have used in a while.

MIGRATING

Migrating all of the data was pretty straightforward. Because I had more freedom than ever, I just copied the data from appwrite onto the Turso database. With only 2 users, and no activity, there really was no actual downtime, atleast no downtime someone talked about.

The coding part took a little longer though. About a month full of coding, bug fixing, and making sure, that it actually migrates seemlessly. We know, there are only 2 users, but still, we tried to make the experience as clean as possible, for everybody.

DBs are now seperated, including our Enviroment variables, which have now also been split into two parts instead of one giant cluster. Our docker images have been scaled up to support for the usage of our API, because it has now increased. Why? Go read the next article to find out!

Migrating a database is difficult, but it is not if the data your migrating is less than 3MB. Still, we thought you would be interested in hearing how we did it.
We will see you in the next one!