Mongifyã§MySQLããMongoDBã¸ã®ç§»è¡ãã¡ãã
ãã®ã¨ã³ããªã¯ãMySQL Casual Advent Calendar 2015 16æ¥ç®ã®ã¨ã³ããªã§ãã
â»ãã®ã¨ã³ããªã¯å人ã®è¦è§£ã§ãããæå±ããçµç¹ã®å
¬å¼è¦è§£ã§ã¯ããã¾ãã
ã©ããã©ããä¹ã«ã¬ã¼æ§ã§ããæ¡éã§ãã
ååã¯ãこのようなブログãæ¸ãã¦ã¢ã¬ã ã£ãããã§ããããã¦ä»åããã¯ã¡ããã¨ããã°æ¸ããã¨æã£ã¦ã¢ããã³ãã«ã¬ã³ãã¼ã®ãã¼ã¸è¦ãªãããããªããæ¸ãã¦ãããã§ãããã
ã¾ããããMySQLã ã£ã¤ã£ã¦ãã ãã
ã¨ãããã¨ã§ä½æ¸ããããªã¨æã£ã¦ããã§ããããã¿è¨äºã¨ãã¦Mongifyã¨ããRubyã®ãããã¯ãã§MySQLããMongoDBã¸ã®ç§»è¡ãã¡ããã®ãããããã¨æãã¾ãã
誰å¾ãªã®ãã¨ãããã¨ã§ããã°ä¿ºå¾ã§ã(∗ᵒ̶̶̷̀Ï˂̶́∗)੭₎₎̊₊♡ウケï¾ï¾ï½¨!
ä»åº¦ããæãããªãããªããã(;´Ðï½)ï¾ï½§ï¾ï½§
ã¡ã ã¼ããã§ãã¹ããã¼ãã«ä½ã£ã¦ã¿ãã
ã¾ãã¯ç§»è¡å
ã®MySQLã«ãã¼ãã«ä½ã£ã¦ã¿ã¾ããã
é©å½ã«ã¤ã³ã¹ãã¼ã«ããã
apt-get install mysql-server mysql-client apt-get install libmysqlclient-dev apt-get install mongodb
mysql> CREATE DATABASE d1; mysql> use d1 mysql> CREATE TABLE t1 ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), nosql VARCHAR(30), price INT UNSIGNED, created_at DATETIME ); mysql> INSERT INTO t1 (name, nosql, price, created_at) VALUES ("kuwa_tw", "mongodb", 10, now()); mysql> INSERT INTO t1 (name, nosql, price, created_at) VALUES ("oranie", "cassandra", 100, now()); mysql> INSERT INTO t1 (name, nosql, price, created_at) VALUES ("kakky_h", "hbase", 1000, now()); mysql> INSERT INTO t1 (name, nosql, price, created_at) VALUES ("la_luna_azul", "riak", 1500, now()); mysql> INSERT INTO t1 (name, nosql, price, created_at) VALUES ("saeoshi", "voldemote", 2000, now());
mysql> SELECT * FROM t1; +----+--------------+-----------+-------+---------------------+ | id | name | nosql | price | created_at | +----+--------------+-----------+-------+---------------------+ | 1 | kuwa_tw | mongodb | 10 | 2015-12-16 13:04:10 | | 2 | oranie | cassandra | 100 | 2015-12-16 13:04:17 | | 3 | kakky_h | hbase | 1000 | 2015-12-16 13:04:29 | | 4 | la_luna_azul | riak | 1500 | 2015-12-16 13:04:34 | | 5 | saeoshi | voldemote | 2000 | 2015-12-16 13:04:38 | +----+--------------+-----------+-------+---------------------+ 5 rows in set (0.00 sec)
ã»ãã§ãã¾ããã
Mongifyã®ã¤ã³ã¹ãã¼ã«
Rubyã¯ãªããé©å½ãªã®ã§ãããã©ã2.2.3ã§ããã¾ãããï¼å²æï¼
Gemã§ä»¥ä¸ã®ãã®ãã¤ã³ã¹ãã¼ã«ã
gem install bundler gem install json_pure gem install activerecord-mysql-adapter gem install mongify
Mongifyã®å®è¡
è¨å®ãã¡ã¤ã«ã®ä½æ
æ¥ç¶æ å ±ãæ¸ãããã¡ã¤ã«ãdatabase.configã¨ãã¦ä¿å
cat <<'EOF' >./database.config sql_connection do adapter "mysql" host "localhost" username "root" password "passw0rd" database "d1" end mongodb_connection do host "localhost" database "d1" end EOF
ãã§ãã¯ãworksã«ãªã£ããOK
$ mongify check database.config SQL connection works NoSQL connection works
æ¢åã®MySQLãã¼ã¿ãã¼ã¹ã®æ å ±ãåå¾
translationã³ãã³ãã§translation.rbã¨ãã¦ãDBã®æ
å ±ãæ¸ãåºã
$ mongify translation database.config > translation.rb
ãããªã®ãåºã¾ããã
$ cat translation.rb table "t1" do column "id", :key, :as => :integer column "name", :string column "nosql", :string column "price", :integer column "created_at", :datetime end
MongoDBãã¼ã¿ãã¼ã¹ã¸ã®ãã¤ã°ã¬ã¼ã·ã§ã³
processã³ãã³ãã§ãã¤ã°ã¬ã¼ã·ã§ã³
$ mongify process database.config translation.rb Copying t1 (1/1): (5/5) 100% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:00 Updating References t1: (5/5) 100% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:00 Removing pre_mongified_id t1: (1/1) 100% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:00
ã¿ã¦ã¿ã¾ããã
$ echo 'db.t1.find()' | mongo d1 MongoDB shell version: 2.4.9 connecting to: d2 { "_id" : ObjectId("567164b57609613c3d000001"), "created_at" : ISODate("2015-12-16T13:04:10Z"), "name" : "kuwa_tw", "nosql" : "mongodb", "price" : 10 } { "_id" : ObjectId("567164b57609613c3d000002"), "created_at" : ISODate("2015-12-16T13:04:17Z"), "name" : "oranie", "nosql" : "cassandra", "price" : 100 } { "_id" : ObjectId("567164b57609613c3d000003"), "created_at" : ISODate("2015-12-16T13:04:29Z"), "name" : "kakky_h", "nosql" : "hbase", "price" : 1000 } { "_id" : ObjectId("567164b57609613c3d000004"), "created_at" : ISODate("2015-12-16T13:04:34Z"), "name" : "la_luna_azul", "nosql" : "riak", "price" : 1500 } { "_id" : ObjectId("567164b57609613c3d000005"), "created_at" : ISODate("2015-12-16T13:04:38Z"), "name" : "saeoshi", "nosql" : "voldemote", "price" : 2000 } bye
ãããªã£ããæåã§ãã
ã©ãã§ããããã¯ãã£ã¦ããã¾ããã¼ãã®ã·ã§ã«ã¹ã¯ãªããã¨éã£ã¦ç¶ºéºã§ããã綺éºã
ã¨ãããã¨ã§ããã¾ãã¦ãMySQLããMongoDBã«ç§»è¡ãããããªãã¦ããçããæ¹ãããã¾ãããæ¯éãããªæãã§è©¦ãã¦ã¿ã¦ã¯ãããã§ããããã
ãã ã責任ã¯åãã¾ããããããï¼æªè«çãªçµããæ¹ï¼ï¼ä»å¹´ãããï¼
![ã¨ãã¹ãã¼ãã®ããã®MySQL[éç¨+管ç]ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ã¬ã¤ã ã¨ãã¹ãã¼ãã®ããã®MySQL[éç¨+管ç]ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ã¬ã¤ã](http://ecx.images-amazon.com/images/I/41oqE-9dM2L._SL160_.jpg)
ã¨ãã¹ãã¼ãã®ããã®MySQL[éç¨+管ç]ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ã¬ã¤ã
- ä½è : 奥éå¹¹ä¹
- åºç社/ã¡ã¼ã«ã¼: æè¡è©è«ç¤¾
- çºå£²æ¥: 2010/06/12
- ã¡ãã£ã¢: 大åæ¬
- è³¼å ¥: 16人 ã¯ãªãã¯: 204å
- ãã®ååãå«ãããã° (35件) ãè¦ã
![稲å·æ·³äº çç¸ã»ææã®ç¾å ´ æ¬å½ã®ææããã¡ã¦ã¯ãããªãç·¨ [DVD] 稲å·æ·³äº çç¸ã»ææã®ç¾å ´ æ¬å½ã®ææããã¡ã¦ã¯ãããªãç·¨ [DVD]](http://ecx.images-amazon.com/images/I/51KVTMZ7b0L._SL160_.jpg)
稲å·æ·³äº çç¸ã»ææã®ç¾å ´ æ¬å½ã®ææããã¡ã¦ã¯ãããªãç·¨ [DVD]
- åºç社/ã¡ã¼ã«ã¼: ãããããã»ãã¼ã¨ã
- çºå£²æ¥: 2013/08/02
- ã¡ãã£ã¢: DVD
- ãã®ååãå«ãããã° (2件) ãè¦ã

MongoDBã¤ã³ã»ã¢ã¯ã·ã§ã³
- ä½è : Kyle Banker,Skyæ ªå¼ä¼ç¤¾çå·ç«å¸
- åºç社/ã¡ã¼ã«ã¼: ãªã©ã¤ãªã¼ã¸ã£ãã³
- çºå£²æ¥: 2012/12/14
- ã¡ãã£ã¢: 大åæ¬
- è³¼å ¥: 5人 ã¯ãªãã¯: 55å
- ãã®ååãå«ãããã° (8件) ãè¦ã