https://github.com/thien0291/active_partition
The active_partition gem is a Ruby library designed for Rails application that provides functionality for partitioning data in a database table. Partitioning is a technique used to divide large datasets into smaller, more manageable chunks called partitions. This can improve query performance and make it easier to manage and maintain the data.
https://github.com/thien0291/active_partition
gem partition partitioning postgresql ruby ruby-on-rails
Last synced: 9 months ago
JSON representation
The active_partition gem is a Ruby library designed for Rails application that provides functionality for partitioning data in a database table. Partitioning is a technique used to divide large datasets into smaller, more manageable chunks called partitions. This can improve query performance and make it easier to manage and maintain the data.
- Host: GitHub
- URL: https://github.com/thien0291/active_partition
- Owner: thien0291
- License: mit
- Created: 2024-07-01T07:28:40.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-08-01T17:04:27.000Z (almost 2 years ago)
- Last Synced: 2025-01-14T11:47:10.769Z (over 1 year ago)
- Topics: gem, partition, partitioning, postgresql, ruby, ruby-on-rails
- Language: Ruby
- Homepage:
- Size: 31.3 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# ActivePartition
The active_partition gem is a Ruby library designed for Rails application that provides functionality for partitioning data in a database table. Partitioning is a technique used to divide large datasets into smaller, more manageable chunks called partitions. This can improve query performance and make it easier to manage and maintain the data.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'active_partition'
```
And then execute:
$ bundle install
Or install it yourself as:
$ gem install active_partition
## Usage
TODO: List all use-cases
Apply partitioning to model.
```ruby
class Event < ActiveRecord::Base
include ActivePartition::Partitionable
# the name of partitioned colunn
self.partitioned_by = "created_at"
# You can change this range over time. from months to hours.
self.partition_range = 1.day
# You can choose 1 of the following 2 options
# Keep all partitions within a time period
self.retention_period = 1.month
# Keep last n partitions
self.retention_partition_count = 3
# The start time of the partition range, default is Time.current.beginning_of_hour.utc
# For example, if today is July 31, and you create a new record.
# if the partition_start_from is 2021-01-01, the new partition should cover [2024-07-01 00:00:00 UTC...2024-08-01 00:00:00 UTC]
# if the partition_start_from is nil, the coverage can be [2024-07-31 08:00:00 UTC...2024-08-31 08:00:00 UTC]
# This configuration help us to sync partition ranges of all partitioned tables.
# Therefore, you can easy to join/drop/manage related partitioned tables.
self.partition_start_from = DateTime.new(2021, 1, 1)
end
# auto create a new partition if needed.
Event.create(created_at: Time.current)
# create partition events_p_240404_04_1712203200_1712289600 from 2024-04-04 04:00:00 UTC to 2024-04-05 04:00:00 UTC
# Delete expired partition (you can set cron job to run this command)
Event.delete_expired_partitions
# `premake` is also supported. create 3 1-month partitions
Event.premake 1.month, 3
# create partition outgoing_events_p_240801_04_1722484800_1725163200 from 2024-08-01 04:00:00 UTC to 2024-09-01 04:00:00 UTC
# create partition outgoing_events_p_240901_04_1725163200_1727755200 from 2024-09-01 04:00:00 UTC to 2024-10-01 04:00:00 UTC
# create partition outgoing_events_p_241001_04_1727755200_1730433600 from 2024-10-01 04:00:00 UTC to 2024-11-01 04:00:00 UTC
# You can change premake period if needed. For example, create 2 1-year partition.
Event.premake 1.year, 2
# create partition outgoing_events_p_241101_04_1730433600_1761969600 from 2024-11-01 04:00:00 UTC to 2025-11-01 04:00:00 UTC
# create partition outgoing_events_p_251101_04_1761969600_1793505600 from 2025-11-01 04:00:00 UTC to 2026-11-01 04:00:00 UTC
```
The partition name following the format
```ruby
"#{@table_name}_p_#{readable_from}_#{unix_from}_#{unix_to}"
```
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/active_partition. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/active_partition/blob/main/CODE_OF_CONDUCT.md).
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
## Code of Conduct
Everyone interacting in the ActivePartition project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/active_partition/blob/main/CODE_OF_CONDUCT.md).