ݺߣ

ݺߣShare a Scribd company logo
Introduction
      Ruby On Rails
             NoSQL
         Conclusion




Breizhcamp - Nosql - Ruby

          Nicolas Ledez
   from.slideshare@ledez.net


           17 Juin 2011




                                                   logo


      Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                Ruby On Rails
                       NoSQL
                   Conclusion


Nicolas Ledez




                     <me>


                                                             logo


                Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                Ruby On Rails
                       NoSQL
                   Conclusion


Nicolas Ledez




                Depuis bient?t 5 ans

                                                             logo


                Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                Ruby On Rails
                       NoSQL
                   Conclusion


Nicolas Ledez




    Chef de projet technique


                                                             logo


                Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                    Ruby On Rails
                           NoSQL
                       Conclusion


Nicolas Ledez




                http ://www.breizhcamp.org/
                       Cloud et NoSQL
                                                                 logo


                    Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                     Ruby On Rails
                            NoSQL
                        Conclusion


Nicolas Ledez




                http ://www.rennesonrails.com/
                      Coding Dojo & Confs



                                                                  logo


                     Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                  Ruby On Rails
                         NoSQL
                     Conclusion


Nicolas Ledez




                 http ://www.granit.org/
                Forum Graphotech Cloud


                                                               logo


                   Nicolas Ledez   Breizhcamp - Nosql - Ruby
Introduction
                Ruby On Rails
                       NoSQL
                   Conclusion


Nicolas Ledez




                    </me>


                                                             logo


                Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                       Ruby On Rails
                              NoSQL
                          Conclusion


Plan


  1    Introduction

  2    Ruby On Rails

  3    NoSQL

  4    Conclusion



                                                                    logo


                       Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                                       Sondage
                      Ruby On Rails
                                       NoSQL
                             NoSQL
                                       Ruby & Rails
                         Conclusion


Qui conna?t ?



     NoSQL
         SQL
         Cl/valeur
         Document
     Ruby On Rails
         Ruby
         Rails




                                                                   logo


                      Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                          Sondage
         Ruby On Rails
                          NoSQL
                NoSQL
                          Ruby & Rails
            Conclusion


NoSQL




        Not Only SQL



                                                      logo


         Nicolas Ledez    Breizhcamp - Nosql - Ruby
Choix du moteur
Ruby & Rails




     Ruby
         Plusieurs VM Ruby (MRI, JRuby, MacRuby, Rubinus)
         24,898 gems (en juin 2011)
         +185 000 projets Ruby sur Github
     Rails
         DRY
         Convention over Con?guration
         MVC, migrations, Active Record, etc
Ruby On Rails - i18n



  $ cat config/locales/fr.yml
  fr:
    listing_tickets: "Liste des tickets"
    name: "Nom"
    unknown: "Inconnu"
    back: "Retour"
    are_you_sure: "Etes-vous sur ?"
    editing_ticket: "Edition du ticket"
  $ grep listing_tickets app/views/tickets/index.html.
  <h1><%= t(listing_tickets) %></h1>
Ruby On Rails - generators


  $ rails generate model ticket name:string
    description:text
  $ cat db/migrate/20110602142024_create_tickets.rb
  class CreateTickets < ActiveRecord::Migration
    def change
      create_table :tickets do |t|
        t.string :name
        t.text :description

        t.timestamps
      end
    end
  end
Ruby On Rails - Active Record



  $ cat app/models/ticket.rb
  class Ticket < ActiveRecord::Base
    validates_presence_of :name
    validates_presence_of :status
  end
  $ rake db:migrate
  -- create_table("tickets", {:force=>true})
     -> 0.0696s
  DB -> Model -> Controller -> Vue
Introduction
                           Ruby On Rails    Redis
                                  NoSQL     MongoDB
                              Conclusion


Redis



        Manipulation de cls / valeurs
        Commandes simples
        Valeurs : string, list, set, sorted set, hashes
        Expiration des cls possible
        Utilisation : cache, session, compteurs, queue




                                                                        logo


                           Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                   Ruby On Rails    Redis
                          NoSQL     MongoDB
                      Conclusion


Redis exemples


 Cl/valeur        List                                 Sets
 SET key "value"   LPUSH key 1                          SADD key 1
 GET key           LRANGE key 0 -1                      SMEMBERS key
 DEL key           RPOP key                             SISMEMBER key
 INCR key          LLEN key                             2
 EXPIRE key 5      LTRIM key 0 1                        SRANDMEMBER
 EXPIREAT key                                           key
 <timestp>                                              SREM key 3
 TTL key


                                                                        logo


                   Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                       Ruby On Rails    Redis
                              NoSQL     MongoDB
                          Conclusion


Redis avec Ruby On Rails - backend

  Ajout de "gem redis" dans le Gem?le
  $ cat config/initializers/i18n_backend.rb
  I18n.backend = I18n::Backend::KeyValue.new(
    Redis.new)
  $ cat config/initializers/i18n_backend.rb
  TRANSLATION_STORE = Redis.new
  I18n.backend = I18n::Backend::Chain.new(
    I18n::Backend::KeyValue.new(TRANSLATION_STORE),
    I18n.backend)

                                                                    logo


                       Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                     Ruby On Rails    Redis
                            NoSQL     MongoDB
                        Conclusion


Redis avec Ruby On Rails - frontend

  $ cat app/controllers/translations_controller.rb
  class TranslationsController < ApplicationController
    def index
      @translations = TRANSLATION_STORE
    end

    def create
      I18n.backend.store_translations(params[:locale],
        {params[:key] => params[:value]}, :escape => false)
      redirect_to translations_url,
        :notice => "Added translations"
    end
  end
                                                                  logo


                     Nicolas Ledez    Breizhcamp - Nosql - Ruby
Redis avec Ruby On Rails - hack ROR 3.1 rc1 1/3

  $ cat config/environment.rb
  # Load the rails application
  require File.expand_path(../application, __FILE__)

  module I18n
   module Backend
    class KeyValue
      module Implementation
       def store_translations(locale, data, options = {})
          #@store[key] = ActiveSupport::JSON.encode(value) unless
          @store[key] = ActiveSupport::JSON.encode([value]) unless
         end
       end
      end
    end
   end
  end
Redis avec Ruby On Rails - hack ROR 3.1 rc1 2/3


  module I18n
   module Backend
    class KeyValue
      module Implementation
      protected
       def lookup(locale, key, scope = [], options = {})
        #value = ActiveSupport::JSON.decode(value) if value
        value = ActiveSupport::JSON.decode(value)[0] if value
       end
      end
    end
   end
  end

  # Initialize the rails application
  Tickets::Application.initialize!
Redis avec Ruby On Rails - hack ROR 3.1 rc1 3/3
Introduction
                   Ruby On Rails    Redis
                          NoSQL     MongoDB
                      Conclusion


MongoDB




    Base oriente documents (BSON)
    Un systme de requtes volu
    Scalable
    Hautes performances
    Sans schma




                                                                logo


                    Nicolas Ledez   Breizhcamp - Nosql - Ruby
Introduction
                     Ruby On Rails    Redis
                            NoSQL     MongoDB
                        Conclusion


MongoDB exemples 1/2


  show dbs
  use db_name
  show collections

  db.foo.find();

  db.foo.save({ name : "sara"});

  person = db.people.findOne( { name : "sara" } );
  person.city = "New York";
  db.people.save( person );
                                                                  logo


                     Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                  Ruby On Rails    Redis
                         NoSQL     MongoDB
                     Conclusion


MongoDB exemples 2/2



  db.foo.drop()

  db.foo.remove()
  db.foo.remove( { name : "sara" } )

  db.foo.getIndexKeys()
  db.foo.ensureIndex({ _field_ : 1 })



                                                               logo


                  Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                        Ruby On Rails    Redis
                               NoSQL     MongoDB
                           Conclusion


Avec Rails - con?g


  con?g/initializers/mongo.rb
  MongoMapper.connection = Mongo::Connection.new(localhost, 270
  MongoMapper.database = "#myapp-#{Rails.env}"

  if defined?(PhusionPassenger)
      PhusionPassenger.on_event(:starting_worker_process) do |fork
        MongoMapper.connection.connect if forked
      end
  end




                                                                     logo


                        Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                       Ruby On Rails    Redis
                              NoSQL     MongoDB
                          Conclusion


Avec Rails - model



  app/models/note.rb
  class Note
    include MongoMapper::Document

    key :title, String, :required => true
    key :body, String
  end




                                                                    logo


                       Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction
                    Ruby On Rails    Redis
                           NoSQL     MongoDB
                       Conclusion


Avec Rails -  la place dActive Record




     Pas de migration du schma de la BDD
     Tolrance du modle




                                                                 logo


                     Nicolas Ledez   Breizhcamp - Nosql - Ruby
Introduction   Conclusion
               Ruby On Rails    Questions
                      NoSQL     Sources
                  Conclusion    Licence


Conclusion




  Conclusion




                                                            logo


               Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction   Conclusion
                Ruby On Rails    Questions
                       NoSQL     Sources
                   Conclusion    Licence


Questions




  Questions ?




                                                             logo


                Nicolas Ledez    Breizhcamp - Nosql - Ruby
Introduction   Conclusion
                      Ruby On Rails    Questions
                             NoSQL     Sources
                         Conclusion    Licence


Sources



     http ://blog.nahurst.com/visual-guide-to-nosql-systems
     http ://nosql-database.org/
     http ://www.camilleroux.com/2010/08/16/pourquoi-ruby-on-
     rails-est-genial-1-sur-2/
     http ://railscasts.com/episodes/256-i18n-backends
     http ://www.slideshare.net/karmi/redis-the-ak47-of-
     postrelational-databases



                                                                   logo


                       Nicolas Ledez   Breizhcamp - Nosql - Ruby
Introduction   Conclusion
          Ruby On Rails    Questions
                 NoSQL     Sources
             Conclusion    Licence


Licence




              CC BY-NC-SA




                                                       logo


          Nicolas Ledez    Breizhcamp - Nosql - Ruby

More Related Content

Breizhcamp NoSQL

  • 1. Introduction Ruby On Rails NoSQL Conclusion Breizhcamp - Nosql - Ruby Nicolas Ledez from.slideshare@ledez.net 17 Juin 2011 logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 2. Introduction Ruby On Rails NoSQL Conclusion Nicolas Ledez <me> logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 3. Introduction Ruby On Rails NoSQL Conclusion Nicolas Ledez Depuis bient?t 5 ans logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 4. Introduction Ruby On Rails NoSQL Conclusion Nicolas Ledez Chef de projet technique logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 5. Introduction Ruby On Rails NoSQL Conclusion Nicolas Ledez http ://www.breizhcamp.org/ Cloud et NoSQL logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 6. Introduction Ruby On Rails NoSQL Conclusion Nicolas Ledez http ://www.rennesonrails.com/ Coding Dojo & Confs logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 7. Introduction Ruby On Rails NoSQL Conclusion Nicolas Ledez http ://www.granit.org/ Forum Graphotech Cloud logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 8. Introduction Ruby On Rails NoSQL Conclusion Nicolas Ledez </me> logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 9. Introduction Ruby On Rails NoSQL Conclusion Plan 1 Introduction 2 Ruby On Rails 3 NoSQL 4 Conclusion logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 10. Introduction Sondage Ruby On Rails NoSQL NoSQL Ruby & Rails Conclusion Qui conna?t ? NoSQL SQL Cl/valeur Document Ruby On Rails Ruby Rails logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 11. Introduction Sondage Ruby On Rails NoSQL NoSQL Ruby & Rails Conclusion NoSQL Not Only SQL logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 13. Ruby & Rails Ruby Plusieurs VM Ruby (MRI, JRuby, MacRuby, Rubinus) 24,898 gems (en juin 2011) +185 000 projets Ruby sur Github Rails DRY Convention over Con?guration MVC, migrations, Active Record, etc
  • 14. Ruby On Rails - i18n $ cat config/locales/fr.yml fr: listing_tickets: "Liste des tickets" name: "Nom" unknown: "Inconnu" back: "Retour" are_you_sure: "Etes-vous sur ?" editing_ticket: "Edition du ticket" $ grep listing_tickets app/views/tickets/index.html. <h1><%= t(listing_tickets) %></h1>
  • 15. Ruby On Rails - generators $ rails generate model ticket name:string description:text $ cat db/migrate/20110602142024_create_tickets.rb class CreateTickets < ActiveRecord::Migration def change create_table :tickets do |t| t.string :name t.text :description t.timestamps end end end
  • 16. Ruby On Rails - Active Record $ cat app/models/ticket.rb class Ticket < ActiveRecord::Base validates_presence_of :name validates_presence_of :status end $ rake db:migrate -- create_table("tickets", {:force=>true}) -> 0.0696s DB -> Model -> Controller -> Vue
  • 17. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion Redis Manipulation de cls / valeurs Commandes simples Valeurs : string, list, set, sorted set, hashes Expiration des cls possible Utilisation : cache, session, compteurs, queue logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 18. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion Redis exemples Cl/valeur List Sets SET key "value" LPUSH key 1 SADD key 1 GET key LRANGE key 0 -1 SMEMBERS key DEL key RPOP key SISMEMBER key INCR key LLEN key 2 EXPIRE key 5 LTRIM key 0 1 SRANDMEMBER EXPIREAT key key <timestp> SREM key 3 TTL key logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 19. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion Redis avec Ruby On Rails - backend Ajout de "gem redis" dans le Gem?le $ cat config/initializers/i18n_backend.rb I18n.backend = I18n::Backend::KeyValue.new( Redis.new) $ cat config/initializers/i18n_backend.rb TRANSLATION_STORE = Redis.new I18n.backend = I18n::Backend::Chain.new( I18n::Backend::KeyValue.new(TRANSLATION_STORE), I18n.backend) logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 20. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion Redis avec Ruby On Rails - frontend $ cat app/controllers/translations_controller.rb class TranslationsController < ApplicationController def index @translations = TRANSLATION_STORE end def create I18n.backend.store_translations(params[:locale], {params[:key] => params[:value]}, :escape => false) redirect_to translations_url, :notice => "Added translations" end end logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 21. Redis avec Ruby On Rails - hack ROR 3.1 rc1 1/3 $ cat config/environment.rb # Load the rails application require File.expand_path(../application, __FILE__) module I18n module Backend class KeyValue module Implementation def store_translations(locale, data, options = {}) #@store[key] = ActiveSupport::JSON.encode(value) unless @store[key] = ActiveSupport::JSON.encode([value]) unless end end end end end end
  • 22. Redis avec Ruby On Rails - hack ROR 3.1 rc1 2/3 module I18n module Backend class KeyValue module Implementation protected def lookup(locale, key, scope = [], options = {}) #value = ActiveSupport::JSON.decode(value) if value value = ActiveSupport::JSON.decode(value)[0] if value end end end end end # Initialize the rails application Tickets::Application.initialize!
  • 23. Redis avec Ruby On Rails - hack ROR 3.1 rc1 3/3
  • 24. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion MongoDB Base oriente documents (BSON) Un systme de requtes volu Scalable Hautes performances Sans schma logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 25. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion MongoDB exemples 1/2 show dbs use db_name show collections db.foo.find(); db.foo.save({ name : "sara"}); person = db.people.findOne( { name : "sara" } ); person.city = "New York"; db.people.save( person ); logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 26. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion MongoDB exemples 2/2 db.foo.drop() db.foo.remove() db.foo.remove( { name : "sara" } ) db.foo.getIndexKeys() db.foo.ensureIndex({ _field_ : 1 }) logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 27. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion Avec Rails - con?g con?g/initializers/mongo.rb MongoMapper.connection = Mongo::Connection.new(localhost, 270 MongoMapper.database = "#myapp-#{Rails.env}" if defined?(PhusionPassenger) PhusionPassenger.on_event(:starting_worker_process) do |fork MongoMapper.connection.connect if forked end end logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 28. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion Avec Rails - model app/models/note.rb class Note include MongoMapper::Document key :title, String, :required => true key :body, String end logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 29. Introduction Ruby On Rails Redis NoSQL MongoDB Conclusion Avec Rails - la place dActive Record Pas de migration du schma de la BDD Tolrance du modle logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 30. Introduction Conclusion Ruby On Rails Questions NoSQL Sources Conclusion Licence Conclusion Conclusion logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 31. Introduction Conclusion Ruby On Rails Questions NoSQL Sources Conclusion Licence Questions Questions ? logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 32. Introduction Conclusion Ruby On Rails Questions NoSQL Sources Conclusion Licence Sources http ://blog.nahurst.com/visual-guide-to-nosql-systems http ://nosql-database.org/ http ://www.camilleroux.com/2010/08/16/pourquoi-ruby-on- rails-est-genial-1-sur-2/ http ://railscasts.com/episodes/256-i18n-backends http ://www.slideshare.net/karmi/redis-the-ak47-of- postrelational-databases logo Nicolas Ledez Breizhcamp - Nosql - Ruby
  • 33. Introduction Conclusion Ruby On Rails Questions NoSQL Sources Conclusion Licence Licence CC BY-NC-SA logo Nicolas Ledez Breizhcamp - Nosql - Ruby