Enviar búsqueda
Cargar
Integration Technology of Ruby and DB.
•
0 recomendaciones
•
778 vistas
Tamotsu Furuya
Seguir
Rubyとデータベースの連携技術
Leer menos
Leer más
Denunciar
Compartir
Denunciar
Compartir
1 de 22
Descargar ahora
Descargar para leer sin conexión
Recomendados
OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~
Shigeru Hanada
Hadoop - OSC2010 Tokyo/Spring
Hadoop - OSC2010 Tokyo/Spring
Shinichi YAMASHITA
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
Akihiro Kuwano
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Seiichiro Ishida
Hadoopソースコードリーディング8/MapRを使ってみた
Hadoopソースコードリーディング8/MapRを使ってみた
Recruit Technologies
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
Uptime Technologies LLC (JP)
Introduction to fuzzy kmeans on mahout
Introduction to fuzzy kmeans on mahout
takaya imai
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
NTT DATA Technology & Innovation
Recomendados
OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~
Shigeru Hanada
Hadoop - OSC2010 Tokyo/Spring
Hadoop - OSC2010 Tokyo/Spring
Shinichi YAMASHITA
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
Akihiro Kuwano
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Seiichiro Ishida
Hadoopソースコードリーディング8/MapRを使ってみた
Hadoopソースコードリーディング8/MapRを使ってみた
Recruit Technologies
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
Uptime Technologies LLC (JP)
Introduction to fuzzy kmeans on mahout
Introduction to fuzzy kmeans on mahout
takaya imai
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
NTT DATA Technology & Innovation
MapR M7 技術概要
MapR M7 技術概要
MapR Technologies Japan
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
Uptime Technologies LLC (JP)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
Stormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPI
AdvancedTechNight
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
Uptime Technologies LLC (JP)
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
Daichi Egawa
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介
Dai Utsui
Jubatus使ってみた 作ってみたJubatus
Jubatus使ってみた 作ってみたJubatus
JubatusOfficial
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
Summary of Ruby
Summary of Ruby
Tamotsu Furuya
Management of Gems using Bundler.
Management of Gems using Bundler.
Tamotsu Furuya
20101106 ramaze発表
20101106 ramaze発表
Fukui Osamu
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
初心者エンジニアのシステム構築失敗談
初心者エンジニアのシステム構築失敗談
Makoto Haruyama
LINEのMySQL運用について
LINEのMySQL運用について
LINE Corporation
Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメ
Kazuaki Takase
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloud
Kazuki Aranami
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
Panel Discussion@WebDB forum 2014
Panel Discussion@WebDB forum 2014
Makoto Yui
Datomic&datalog紹介
Datomic&datalog紹介
あしたのオープンソース研究所
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
PHPer のための Ruby 教室
PHPer のための Ruby 教室
higaki
Más contenido relacionado
La actualidad más candente
MapR M7 技術概要
MapR M7 技術概要
MapR Technologies Japan
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
Uptime Technologies LLC (JP)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
Stormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPI
AdvancedTechNight
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
Uptime Technologies LLC (JP)
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
Daichi Egawa
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介
Dai Utsui
Jubatus使ってみた 作ってみたJubatus
Jubatus使ってみた 作ってみたJubatus
JubatusOfficial
La actualidad más candente
(8)
MapR M7 技術概要
MapR M7 技術概要
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Stormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPI
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介
Jubatus使ってみた 作ってみたJubatus
Jubatus使ってみた 作ってみたJubatus
Similar a Integration Technology of Ruby and DB.
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
Summary of Ruby
Summary of Ruby
Tamotsu Furuya
Management of Gems using Bundler.
Management of Gems using Bundler.
Tamotsu Furuya
20101106 ramaze発表
20101106 ramaze発表
Fukui Osamu
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
初心者エンジニアのシステム構築失敗談
初心者エンジニアのシステム構築失敗談
Makoto Haruyama
LINEのMySQL運用について
LINEのMySQL運用について
LINE Corporation
Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメ
Kazuaki Takase
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloud
Kazuki Aranami
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
Panel Discussion@WebDB forum 2014
Panel Discussion@WebDB forum 2014
Makoto Yui
Datomic&datalog紹介
Datomic&datalog紹介
あしたのオープンソース研究所
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
PHPer のための Ruby 教室
PHPer のための Ruby 教室
higaki
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
LINE Corporation
20091030cakephphandson 02
20091030cakephphandson 02
Yusuke Ando
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
Koichiro Sasaki
20160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #5
Koichiro Sasaki
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
aws_opsworks
aws_opsworks
Yukihiko SAWANOBORI
Similar a Integration Technology of Ruby and DB.
(20)
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
Summary of Ruby
Summary of Ruby
Management of Gems using Bundler.
Management of Gems using Bundler.
20101106 ramaze発表
20101106 ramaze発表
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
初心者エンジニアのシステム構築失敗談
初心者エンジニアのシステム構築失敗談
LINEのMySQL運用について
LINEのMySQL運用について
Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメ
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloud
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
Panel Discussion@WebDB forum 2014
Panel Discussion@WebDB forum 2014
Datomic&datalog紹介
Datomic&datalog紹介
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
PHPer のための Ruby 教室
PHPer のための Ruby 教室
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
20091030cakephphandson 02
20091030cakephphandson 02
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #5
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
aws_opsworks
aws_opsworks
Integration Technology of Ruby and DB.
1.
Rubyとデータベースとの連携技術 Rubyとデータベースとの連携技術 Integration Technology of Ruby and Database 鹿児島大学 学術情報基盤センター 学術情報処理研究部門 古屋 保 furuya@cc.kagoshima-u.ac.jp K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 1
2.
Rubyとデータベースとの連携技術 内容 ● 1. データベース連携概要 ● 2. MySQLバインディングによる連携 ● 3. ActiveRecordによる連携 K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 2
3.
Rubyとデータベースとの連携技術 1. データベース連携概要 ● RubyとMySQLデータベースとの連携 – データベース抽象レイヤを使用せず,直接バインディングを使 用してみる.(SQLを記述する必要がある) 「mysql2」…MySQL用のバインディング Gem(https://github.com/brianmario/mysql2) #MySQLのバインディングをインストールする $ gem install mysql2 K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 3
4.
Rubyとデータベースとの連携技術 1. データベース連携概要 ● Rubyとデータベースとの連携 – ほとんどのDBMSと連携可能 MySQL,PostgreSQL,Oracle,Microsoft SQL Server,DB2,SQLite 各データベースAPIへのバインディングをGemで提供 – データベース抽象レイヤ(ActiveRecord) DBの違いを意識することなくコーディング可能. K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 4
5.
Rubyとデータベースとの連携技術 2. MySQLバインディングによる連携 ● 連携するデータベース(テーブル) – 「students」テーブル(予めmysqlツールで作成) mysql> use test; mysql> CREATE TABLE students ( -> id CHAR(11) NOT NULL, -> name VARCHAR(40), -> e_mail VARCHAR(80), -> PRIMARY KEY (id) ->); K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 5
6.
Rubyとデータベースとの連携技術 2. MySQLバインディングによる連携 ● プログラム例 # -*- coding: utf-8 -*- require 'mysql2' # ユーザ dbuser で MySQL の test データベースに接続する. client = Mysql2::Client.new( :host => "localhost", :database => "test", :username => "dbuser", :password => "pass" ) # SQLを実行し結果セットを得る. results = client.query("SELECT * FROM students") K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 6
7.
Rubyとデータベースとの連携技術 2. MySQLバインディングによる連携 ● プログラム例 # 結果セットから全レコードのカラムの値をイテレータで取得する. results.each do |row| printf "%st%st%sn", row["id"], row["name"], row["e_mail"] end # データベースと接続をクローズする. client.close $ ruby dbaccess.rb 1234567891 鹿児島太郎 taro@kago.jp 1234567892 薩摩花子 hana@kago.jp 1234567893 西郷隆盛 taka@satsuma.jp K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 7
8.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● ActiveRecord – データベース抽象レイヤのモジュール – Ruby on Railsを構成するライブラリ群の1つ – O/Rマッピング(Object / Relation Mapping)ライブラリ K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 8
9.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● O/Rマッピング – データベースのレコードとRubyのオブジェクトをマップする – テーブルのフィールドが、オブジェクトの属性となり,フィー ルド名がそのままアクセサとして定義される. K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 9
10.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● プログラム例(ActiveRecord編) # -*- coding: utf-8 -*- require 'active_record' # 1.8系 # require 'rubygems' # require 'activerecord' # データベースとの接続 ActiveRecord::Base.establish_connection( :adapter => 'mysql2', # 使用するDBはMySQLデータベース :host => 'localhost', :database => 'test', :username => 'dbuser', :password => 'pass' ) (次のスライドへ続く...) K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 10
11.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● プログラム例(ActiveRecord編) # O/Rマッピング id,name,e_mail等の id,name,e_mail等の class Student < ActiveRecord::Base 属性メソッドは定義してない 属性メソッドは定義してない end のにも関わらず... のにも関わらず... students = Student.find(:all) students.each do |res| printf "%st%st%sn", res.id, res.name, res.e_mail end $ ruby dbaccess.rb 1234567891 鹿児島太郎 taro@kago.jp 1234567892 薩摩花子 hana@kago.jp 1234567893 西郷隆盛 taka@satsuma.jp K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 11
12.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● Conversion over Configuration(CoC) – 「設定よりも規約」(Railsの哲学) – XMLファイルなどのコンフィグはいらない – すべては命名規約に従うこと K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 12
13.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● YAMLファイルの利用 – YAML (YAML Ain't Markup Language) – 構造化されたテキストフォーマット – Railsでは config/database.yml で利用 YAMLファイルの例: database.yml(MySQL用) development_test: adapter: mysql2 host: localhost database: test username: dbuser password: pass socket: /opt/local/var/run/mysql5/mysqld.sock encoding: utf8 pool: 5 K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 13
14.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● プログラム例(ActiveRecord,YAML利用) # -*- coding:utf-8 -*- require 'active_record' # YAMLを利用したデータベースの接続 ActiveRecord::Base.configurations = YAML.load_file('database.yml') ActiveRecord::Base.establish_connection('development_test') class Student < ActiveRecord::Base end students = Student.find(:all) students.each do |res| printf "%st%st%sn", res.id, res.name, res.e_mail end K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 14
15.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● findメソッドの使用法 例えば... result = Student.find(2) これは次のSQL文と同等である SELECT * FROM students WHERE id = 2 ※プライマリキーフィールドは「id」というフィールド名でなければNG 解決策 class Student < ActiveRecord::Base set_table_name 'gakusei' # テーブル名は任意でもOK set_primary_key 's_code' # プライマリキーは任意でもOK end K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 15
16.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● もうSQLは書かなくても良い? さらに条件をつけて抽出したい場合は... result = Student.find(:all, :conditions => [ 'name = ?', '鹿児島太郎' ]) SELECT * FROM students WHERE name = '鹿児島太郎' find以外にも次のようなメソッドも準備されている... result = Student.find_by_name("鹿児島太郎") さらにレコードの新規追加も... student = Student.new(:id => '1234567894', :name =>"川内次郎", :e_mail => 'jiro@kago.jp') student.save K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 16
17.
Rubyとデータベースとの連携技術 3. ActiveRecordによる連携 ● ホントにSQLは書かなくても良い? 複雑なクエリーは,直接SQLで書くことも可能... result = Student.find_by_sql("SELECT * FROM students WHERE name LIKE '%太郎%' AND e_mail LIKE '%jp%'") まとめ... ● 規約に従えばきちんとO/Rマッピングしてくれる. ● マッピングできれば用意されたメソッドで結果セットを得られる. ● 結果セットから属性メソッドでフィールドデータを得られる. ● 極力SQLを書かなくて済む ● データベースをいつでも交換できる その他... ● DMLだけでなくDDLも可能(Migrationクラス) K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 17
18.
Rubyとデータベースとの連携技術 4. おまけ ● テーブルのJOIN students(学生) subjects(科目) id name e_mail id name teacher 1234567891 鹿児島太郎 taro@kago.jp S01 情報科学入門 山田太郎 1234567892 薩摩花子 hana@kago.jp S02 エンドユーザ実習 鈴木一郎 1234567893 西郷隆盛 taka@kago.jp S03 応用数学 松井秀喜 1 1 courses(履修) student_id subject_id rating 1234567891 S02 A 1234567891 S03 B 多 1234567892 S01 C 多 1234567893 S02 B K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 18
19.
Rubyとデータベースとの連携技術 4. おまけ ● 結合ビュー student_id name subject_id name rating 1234567891 鹿児島太郎 S02 エンドユーザ実習 A 1234567891 鹿児島太郎 S03 応用数学 B 1234567892 薩摩花子 S01 情報科学入門 C 1234567893 西郷隆盛 S02 エンドユーザ実習 B mysql> SELECT student_id, students.name, subject_id, -> subjects.name, rating -> FROM students JOIN (courses JOIN subjects -> ON courses.subject_id = subjects.id ) -> ON students.id = courses.student_id; K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 19
20.
Rubyとデータベースとの連携技術 4. おまけ ● テーブルのJOIN students(学生) subjects(科目) id name e_mail id name teacher 1234567891 鹿児島太郎 taro@kago.jp S01 情報科学入門 山田太郎 1234567892 薩摩花子 hana@kago.jp S02 エンドユーザ実習 鈴木一郎 1234567893 西郷隆盛 taka@kago.jp S03 応用数学 松井秀喜 has_many :course has_many :course courses(履修) student_id subject_id rating 1234567891 S02 A 1234567891 S03 B belongs_to :student 1234567892 S01 C belongs_to :subject 1234567893 S02 B K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 20
21.
Rubyとデータベースとの連携技術 4. おまけ ● テーブル間リレーションを意識した定義 class Student < ActiveRecord::Base has_many :course end class Subject < ActiveRecord::Base has_many :course End class Course < ActiveRecord::Base belongs_to :student belongs_to :subject end K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 21
22.
Rubyとデータベースとの連携技術 4. おまけ ● 結合結果の出力 courses = Course.find(:all, :include => [:student, :subject]) courses.each do |res| printf "%st%st%st%st%sn", res.student_id, res.student.name, res.subject_id, res.subject.name, res.rating end $ ruby dbaccess.rb 1234567891 鹿児島太郎 S02 エンドユーザ実習 A 1234567891 鹿児島太郎 S03 応用数学 B 1234567892 薩摩花子 S01 情報科学入門 C 1234567893 西郷隆盛 S02 エンドユーザ実習 B K-Ruby, July 28, 2011 © Tamotsu FURUYA, All rights reserved. 22
Descargar ahora