All Projects → cannikin → great-migration

cannikin / great-migration

Licence: MIT license
Copy objects from Rackspace to S3

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to great-migration

ProcessMigrator
ProcessWire module that facilitates automated migration and sharing of page trees along with their templates and fields.
Stars: ✭ 29 (+93.33%)
Mutual labels:  export, migration, import
open2fa
Two-factor authentication app with import/export for iOS and macOS. All codes encrypted with AES 256. FaceID & TouchID support included. Written with love in SwiftUI ❤️
Stars: ✭ 24 (+60%)
Mutual labels:  export, import
migration
TYPO3 Migration Framework for every kind of migration/imports from CLI (e.g. Templavoila to Gridelements, tt_news to news, etc...)
Stars: ✭ 52 (+246.67%)
Mutual labels:  migration, import
connect-backup
A tool to backup and restore AWS Connect, with some useful other utilities too
Stars: ✭ 19 (+26.67%)
Mutual labels:  export, import
Dataset Serialize
JSON to DataSet and DataSet to JSON converter for Delphi and Lazarus (FPC)
Stars: ✭ 213 (+1320%)
Mutual labels:  export, import
Portphp
Data import/export framework for PHP
Stars: ✭ 225 (+1400%)
Mutual labels:  export, import
craft3-blockonomicon
Manage matrix fields on a per-block basis. Bundle presentation with blocks. Render entire matrices with a single line.
Stars: ✭ 32 (+113.33%)
Mutual labels:  export, import
Dynein
DynamoDB CLI written in Rust.
Stars: ✭ 126 (+740%)
Mutual labels:  export, import
FSDevTools
Project to support developer experience (DX) with FirstSpirit template development by offering a connection between a VCS like Git and FirstSpirit.
Stars: ✭ 29 (+93.33%)
Mutual labels:  export, import
blender-xray
STALKER (aka xray-engine) import/export plugin for Blender 3D
Stars: ✭ 132 (+780%)
Mutual labels:  export, import
sync-magento-2-migration
Release of rough proof of concept from 2018 that allows to import and export millions of products quickly
Stars: ✭ 51 (+240%)
Mutual labels:  export, import
Sketchup Stl
A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export.
Stars: ✭ 214 (+1326.67%)
Mutual labels:  export, import
Csvreader
csvreader library / gem - read tabular data in the comma-separated values (csv) format the right way (uses best practices out-of-the-box with zero-configuration)
Stars: ✭ 169 (+1026.67%)
Mutual labels:  export, import
skinner
Skin export / import tools for Autodesk Maya
Stars: ✭ 68 (+353.33%)
Mutual labels:  export, import
Keycloak Config Cli
Import YAML/JSON-formatted configuration files into Keycloak - Configuration as Code for Keycloak.
Stars: ✭ 147 (+880%)
Mutual labels:  export, import
cassandra-exporter
Simple Tool to Export / Import Cassandra Tables into JSON
Stars: ✭ 44 (+193.33%)
Mutual labels:  export, import
Grafana Import Export
shell scripts for importing and exporting Grafana's dashboards and datasources
Stars: ✭ 125 (+733.33%)
Mutual labels:  export, import
Couchimport
CouchDB import tool to allow data to be bulk inserted
Stars: ✭ 125 (+733.33%)
Mutual labels:  export, import
format-imports-vscode
Format imports and exports for JavaScript and TypeScript in VS Code.
Stars: ✭ 60 (+300%)
Mutual labels:  export, import
importer-exporter
3D City Database client for high-performance import and export of 3D city model data
Stars: ✭ 104 (+593.33%)
Mutual labels:  export, import

Great Migration


⚠️ This codebase is no longer maintained and it not accepting PRs or Issues! ⚠️


Ever have to migrate from Rackspace Files to S3? I did. And I couldn't find a simple way to do it, so I made one. There's a service mover.io but it gave up after 25,000 objects. I had to copy 175,000.

This is a Ruby script which will log into Rackspace, get a list of all objects from a container (paged in groups of 10,000 by default), and copy those objects to an S3 bucket.

Usage

Install require gems:

bundle install

Call bin/greatmigration and pass the required options:

bin/greatmigration --rackspace-user=username --rackspace-key=123456 \
  --rackspace-container=rackcontainername --rackspace-region=rackspaceregion_like_ord --aws-key=ABCDEF \
  --aws-secret=987654 --aws-bucket=s3bucketname \
  --aws-region=awsregion_like_us-west-2

Check out bin/greatmigration -h for a couple more optional parameters.

Technical Description

To get as much performance out of this script as possible it forks processes to do the actual copying of files to avoid the GIL which is still in place with threads. The first fork occurs after grabbing a page of results from Rackspace. That fork will take care of copying all of the objects in that page. Then we pull from a pool of 8 processes to actually do the uploading of individual objects.

bin/greatmigration
|
+-- page process
|   |
|   +-- upload process
|   +-- upload process
|
|-- page process
|   |
|   +-- upload process
|   +-- upload process
|
|-- ...

In my usage I ended up forking 18 "page" processes and typically had 4-6 "upload" processes running under each one simultaneously. If you have millions of objects you may want to tweak the code to actually start the page processes from a pool as well (otherwise you could end up with a very large number of processes, one for every block of 10,000 objects).

Performance

Your results may vary, but I ran this script on a c4.4xlarge EC2 instance (16 cores). This maxed out the CPUs for the entire run and copied 174,754 objects in 5,430 seconds (just over an hour and a half). This ended up costing $1.32.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].