Apartment
citus
Apartment | citus | |
---|---|---|
5 | 61 | |
2,648 | 9,860 | |
0.4% | 1.4% | |
0.0 | 9.4 | |
2 months ago | 8 days ago | |
Ruby | C | |
MIT License | GNU Affero General Public License v3.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Apartment
-
Figma's Databases team lived to tell the scale
I recall a popular rails gem[1] once upon a time that provided multi-tenancy via postgres schemas.
As it turns out, even the company the initially developed the gem ended up ditching the approach due to some of the issues you outlined above.
Managing separate schemas feels like one of those nefarious decisions that make things simple _initially_ but get you into a world of hurt when you need to scale. The company is since defunct but they have an article where they discuss why they ditched the approach [2], TL;DR it's too difficult to maintain and scale
[1] https://github.com/influitive/apartment#tenants-on-different...
-
Is there a way to have rails return a different set of data depending on the hostname?
Looks like you're trying to implement multi-tenancy. You might also want to look at the apartment gem.
-
Create views to display all data managed by apartment gem
One strategy of the apartment gem is to store tenant data in dedicated schemas in a Postgres database.
- restart rails app from controller action
-
How we found and fixed a rare race condition in our session handling - The GitHub Blog
The other issue I think was with Apartment tenant switching and ActiveRecord's column cache. Some tenants had the updated columns and others didn't. Also with Puma. People love them some Puma! Me, I go with Passenger. Well, if the requirements are right that is...
citus
- SPQR 1.3.0: a production-ready system for horizontal scaling of PostgreSQL
- Citus: PostgreSQL extension that transforms Postgres into a distributed database
-
Figma's Databases team lived to tell the scale
I see they don't mention Citus (https://github.com/citusdata/citus), which is already a fairly mature native Postgres extension. From the details given in the article, in sounds like they just reimplemented it.
I wonder if they were unaware of it or disregarded it for a reason —I currently am in a similar situation as the one described in the blog, trying to shard a massive Postgres DB.
-
PostgreSQL Is Enough
It is possible, if you pay for it. You can do Multi-AZ Clustered Instances in RDS, where you get the benefits of Multi-AZ failover with traffic sharing.
If you can run your own infra – at least on an EC2 level – you can do things like Citus [0] for Postgres, which is about as close to "just add database nodes" as you'll get.
[0]: https://www.citusdata.com/
-
Vitess 18
So while searching for something like this for postgres I came across citus. Any one know how that stacks up?
https://github.com/citusdata/citus
- In-Depth Guide: Citus Technical Readme
-
Revolutionizing Database Scaling with CitusDB
References: CitusDB
- Squeeze the hell out of the system you have
- Show HN: Hydra 1.0 – open-source column-oriented Postgres
- Schema-based sharding comes to PostgreSQL with Citus
What are some alternatives?
Acts As Tennant - Easy multi-tenancy for Rails in a shared database setup.
Greenplum - Greenplum Database - Massively Parallel PostgreSQL for Analytics. An open-source massively parallel data platform for analytics, machine learning and AI.
Milia - Easy multi-tenanting for Rails5 (or Rails4) + Devise
yugabyte-db - YugabyteDB - the cloud native distributed SQL database for mission-critical applications.
activerecord-multi-tenant - Rails/ActiveRecord support for distributed multi-tenant databases like Postgres+Citus
vitess - Vitess is a database clustering system for horizontal scaling of MySQL.
rails_or - Cleaner syntax for writing OR Query in Rails 5, 6. And also add #or support to Rails 3 and 4.
TimescaleDB - An open-source time-series SQL database optimized for fast ingest and complex queries. Packaged as a PostgreSQL extension.
pluck_all - A more efficient way to get data from database. Like #pluck method but return array of hashes instead.
dbt-core - dbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications.
SanitizeSqlLike - Backport #sanitize_sql_like method from Rails 4 for Rails 3. Sanitizes a string so that it is safe to use within an SQL LIKE statement.
stolon - PostgreSQL cloud native High Availability and more.