SlideShare a Scribd company logo
1 of 76
optimize Drupal using
      mongoDB
agenda
let’s get started

what is problem that we face (or what we need/want)

sql - relational databases

shift of technologies - noSQL databases

mongoDB - what is mongo

how to install mongo

finally - drupal & mongo

mongoDB module - what we can do with it

benefits

q&a
about me

name: Vladimir Ilic
employed at: OWFG
email: v_ilic@hotmail.com
t witter: burgerboydaddy
Who should be here instead of me
Who should be here instead of me
Who should be here instead of me
what is problem that we face
or what we want to achieve
with Drupal based solutions
what is problem that we face
or what we want to achieve
with Drupal based solutions
 speed
what is problem that we face
or what we want to achieve
with Drupal based solutions
 speed

        scale
what is problem that we face
or what we want to achieve
with Drupal based solutions
 speed

        scale
                simplicity
how we can do that?
or how to speedup Drupal
server side
   install Varnish for caching pages for
   anonymous users.
   install a persistent cache system
   (Memcached, APC, Memcache).
   use a CDN such as Akamai to ser ve
   static files (JavaScript, CSS, images).
how to speedup drupal -
       code side
use Pressflow, it allows Varnish to serve cached page for
anonymous users.
clean Drupal's watchdog table. Every time a watchdog
error gets logged, it consumes CPU resources on the web
ser ver and database server. It also increases load time
significantly.
implement static and persistent cache strategies until the
slow query log comes up clean.
avoid PHP errors that occur within nested foreach loops at
all costs.
uninstall unused modules.
turn on caching for Drupal core blocks and Views.
how to speedup drupal -
    database side
Drupal sites live or die by their database.
make sure the tables are properly
indexed for faster searching.
do not store unnecessary records, a 100
node database will be always accessed
faster than a 3 million node database.
change how/where you store your data
speed -
shift of technologies
from Pentium 100MHz, 16MB RAM,
200 MB HDD to
my cell phone: dual core 1GHz, 1GB RAM,
32GB storage
or maybe some cloud ser ver with 32+
CPU’s, few TB RAM, ...
our database
 technology
our database
 technology
our database
       technology
1974 - The
relational
database is created
sql - relational dbs
sql - relational dbs



1979
sql - relational dbs



1979   1982-1996
sql - relational dbs



1979   1982-1996   1995
simplicity?




relational database model for eCommerce app
simplicity?




relational database model for eCommerce app
simplicity?

* joins
* joins
* joins




   relational database model for eCommerce app
real life example
              sell groceries
Product {
                          General Product
id:                       attributes
UPC:
brand:
description:
MSRP:
price:
in-stock:
...
PLU:               4011
unit of measure:   lb
                          Item Specific
origin:            BC     attributes
seasonal:          yes
...
real life example -
   but we also sell books
Product {

id:                                    General Product
UPC:                                   attributes stay
brand:
description:
                                       the same
MSRP:
price:
in-stock:
...
author:             Isaac Asimov       Book Specific
title:              Foudation’s Edge   attributes are
binding:            Paperback
publication date:   1982               different
publisher name:     Spectra
number of pages:    480
ISBN:               0553293389
real life example -
        ops, we want more
Product {
                              General Product
id:                           attributes stay the
UPC:                          same
brand:
description:
MSRP:
price:
in-stock:
...                           Clothing specific
brand:         Lee            attributes are
gender:        Mens           totally different ...
make:          Vintage
style:         Straight Cut   and not consistent
length:        34             across brands &
width:         42             make
color:         Black
material:      Cotton
...
Now we’re screwed
Now we’re screwed
shift of technologies -
      db solutions
from well-established relational databases to NoSQL
technologies.
NoSQL was first introduced as concept in 1998, it really
wasn’t until 2009 that it emerged as a real trend.
NoSQL solutions aren't replacements traditional
solutions, but rather address a specific need in addition
to what one might get from traditional offerings.
In 90% of the time you’ll probably implement a hybrid
system.
put simply, NoSQL is about being open and aware of
alternative, existing and additional patterns and tools
for managing your data.
shift is happening now
 few years ago (and still now) MySQL was
 the undisputed king of the open-source
 database hill.
 It is still growing with great speed (40%
 compound annual grow rate)
  but
 There are some competitors that are
 emerging and grow even faster.
shift is happening now
shift is happening now
shift is happening now




451 Research notes:

"NoSQL database technologies are largely being adopted for
new projects that require additional scalability,
performance, relaxed consistency and agility."
shift is happening now




451 Research notes:

"NoSQL database technologies are largely being adopted for
new projects that require additional scalability,            in other words:
performance, relaxed consistency and agility."                    web :-)
the NoSQL ecosystem
what is Not Only SQL?
what is Not Only SQL?
•Non-Relational   •Schema-Free
•Distributed      •Replication Support
•Open-Source      •Simple API
•Horizontally     •Eventually
 Scalable          Consistent
mongoDB
  agile and scalable

DB designed for today
MongoDB (from "humongous") is a
scalable, high-performance, open source
NoSQL database.
what is mongo
          Application      Document
                           Oriented
    High
                           { author: “vladimir”,
                             date: new Date(),
                             text: “drupal-MongoDB...”,
Performance                  tags: [“tech”, “database”]}




                             Fully
                           Consistent

   Horizontally Scalable
other features of MongoDB
  Document-based queries
       Flexible document queries expressed in JSON/Javascript.
  Map Reduce
       Flexible aggregation and data processing.
       Queries run in parallel on all shards.
  GridFS
       Store files of any size easily.
  Geospatial Indexing
       Find object based on location. (i.e. find closest n items to x)
  Many Production Deployments
what is mongo
Document oriented storage
  JSON-style documents with dynamic schemas offer simplicity and power.

Full index support (+geo)
  Index on any attribute, just like you're used to.

Replication and High Availability
  Mirror across LANs and WANs for scale and peace of mind.

Querying
  Rich, document-based queries

Fast In-Place Updates
Map/Reduce
mongoDB philosophy
Keep functionality when we can (key/
value stores are great, but we need
more)
Non-relational (no joins) makes scaling
horizontally practical
Document data models are good
Database technology should run
anywhere VMs, cloud, etc
6 mongoDB concepts
MongoDB has the same concept of a 'd atabase' with
which you are likely already familiar (or a schema
for you Oracle folks). Within a MongoDB instance
you can have zero or more databases, each acting
as high-level containers for everything else.
A database can have zero or more 'c ollections'. A
collection shares enough in common with a
traditional 'table' that you can safely think of the
t wo as the same thing.
Collections are made up of zero or more 'documents'.
Again, a document can safely be thought of as a
'row'.
6 mongoDB concepts
A document is made up of one or more 'fields', which you
can probably guess are a lot like 'c olumns'.
'Indexes' in MongoDB function much like their RDBMS
counterparts.
'Cursors' are different than the other five concepts but
they are important enough, and often overlooked, that
I think they are worthy of their own discussion. The
important thing to understand about cursors is that
when you ask MongoDB for data, it returns a cursor,
which we can do things to, such as counting or skipping
ahead, without actually pulling down data.
our eCommerce problem again
our eCommerce problem again
           { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
           ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"),
           ‘state’: ‘cart’,


           ‘line_items’: [
               {‘UPC’:885909377275’,
                ‘name’: ‘Tide HE’,
                ‘quantity’: 2,
                ‘tax’: ‘HST’,
                ‘retail_price’: 10.99
               },


               {‘UPC’: ‘2348751987’,
                 ‘name’: ‘bananas’,
                 ‘weight’: 3.5,
                 ‘UOM’: kg,
                 ‘retail_price’: 2.75
               },
              ],


           ‘shipping_address’: {
             ‘street’: ‘1245 76 Ave.’,
             ‘city’: ‘Surrey’,
             ‘province’: ‘BC’,
             ‘postal code’: ‘V1Q 1K8‘
              }


           ‘subtotal’: 13.74
           }
our eCommerce problem again
                                { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
                                ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"),
Document                        ‘state’: ‘cart’,

- Analogous to a row in RDBMS   ‘line_items’: [
- Represented as JSON (BSON)        {‘UPC’:885909377275’,
                                     ‘name’: ‘Tide HE’,
                                     ‘quantity’: 2,
                                     ‘tax’: ‘HST’,
                                     ‘retail_price’: 10.99
                                    },


                                    {‘UPC’: ‘2348751987’,
                                      ‘name’: ‘bananas’,
                                      ‘weight’: 3.5,
                                      ‘UOM’: kg,
                                      ‘retail_price’: 2.75
                                    },
                                   ],


                                ‘shipping_address’: {
                                  ‘street’: ‘1245 76 Ave.’,
                                  ‘city’: ‘Surrey’,
                                  ‘province’: ‘BC’,
                                  ‘postal code’: ‘V1Q 1K8‘
                                   }


                                ‘subtotal’: 13.74
                                }
our eCommerce problem again
                                { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
                                ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"),
Document                        ‘state’: ‘cart’,

- Analogous to a row in RDBMS   ‘line_items’: [
- Represented as JSON (BSON)        {‘UPC’:885909377275’,
                                     ‘name’: ‘Tide HE’,
                                     ‘quantity’: 2,
                                     ‘tax’: ‘HST’,
                                     ‘retail_price’: 10.99
                                    },

Embedding                           {‘UPC’: ‘2348751987’,
- Analogous to a foreign key          ‘name’: ‘bananas’,
                                      ‘weight’: 3.5,
- Can be                              ‘UOM’: kg,
    - sub objects                   },
                                      ‘retail_price’: 2.75

    - collections                  ],


                                ‘shipping_address’: {
                                  ‘street’: ‘1245 76 Ave.’,
                                  ‘city’: ‘Surrey’,
                                  ‘province’: ‘BC’,
                                  ‘postal code’: ‘V1Q 1K8‘
                                   }


                                ‘subtotal’: 13.74
                                }
our eCommerce problem again
                                { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
                                ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"),
Document                        ‘state’: ‘cart’,

- Analogous to a row in RDBMS   ‘line_items’: [
- Represented as JSON (BSON)        {‘UPC’:885909377275’,
                                     ‘name’: ‘Tide HE’,
                                     ‘quantity’: 2,
                                     ‘tax’: ‘HST’,
                                     ‘retail_price’: 10.99
                                    },

Embedding                           {‘UPC’: ‘2348751987’,
- Analogous to a foreign key          ‘name’: ‘bananas’,
                                      ‘weight’: 3.5,
- Can be                              ‘UOM’: kg,
    - sub objects                   },
                                      ‘retail_price’: 2.75

    - collections                  ],


                                ‘shipping_address’: {
                                  ‘street’: ‘1245 76 Ave.’,
                                  ‘city’: ‘Surrey’,
                                  ‘province’: ‘BC’,
                                  ‘postal code’: ‘V1Q 1K8‘
                                   }


                                ‘subtotal’: 13.74
                                }
our eCommerce problem again
                                { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
                                ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"),
Document                        ‘state’: ‘cart’,

- Analogous to a row in RDBMS   ‘line_items’: [
- Represented as JSON (BSON)        {‘UPC’:885909377275’,
                                     ‘name’: ‘Tide HE’,
                                     ‘quantity’: 2,
                                     ‘tax’: ‘HST’,
                                     ‘retail_price’: 10.99
                                    },

Embedding                           {‘UPC’: ‘2348751987’,
- Analogous to a foreign key          ‘name’: ‘bananas’,
                                      ‘weight’: 3.5,
- Can be                              ‘UOM’: kg,
    - sub objects                   },
                                      ‘retail_price’: 2.75

    - collections                  ],


                                ‘shipping_address’: {
                                  ‘street’: ‘1245 76 Ave.’,
                                  ‘city’: ‘Surrey’,
                                  ‘province’: ‘BC’,
                                  ‘postal code’: ‘V1Q 1K8‘
                                   }


                                ‘subtotal’: 13.74
                                }
our eCommerce problem again
                                 { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
                                 ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"),
Document                         ‘state’: ‘cart’,

- Analogous to a row in RDBMS    ‘line_items’: [
- Represented as JSON (BSON)         {‘UPC’:885909377275’,
                                      ‘name’: ‘Tide HE’,
                                      ‘quantity’: 2,
                                      ‘tax’: ‘HST’,
                                      ‘retail_price’: 10.99
                                     },

Embedding                            {‘UPC’: ‘2348751987’,
- Analogous to a foreign key           ‘name’: ‘bananas’,
                                       ‘weight’: 3.5,
- Can be                               ‘UOM’: kg,
    - sub objects                    },
                                       ‘retail_price’: 2.75

    - collections                   ],


                                 ‘shipping_address’: {
                                   ‘street’: ‘1245 76 Ave.’,
References                         ‘city’: ‘Surrey’,
                                   ‘province’: ‘BC’,
                                   ‘postal code’: ‘V1Q 1K8‘
  - Analogous to a foreign key      }
  - Think “relationship”
                                 ‘subtotal’: 13.74
                                 }
our eCommerce problem again
                                 { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
                                 ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"),
Document                         ‘state’: ‘cart’,

- Analogous to a row in RDBMS    ‘line_items’: [
- Represented as JSON (BSON)         {‘UPC’:885909377275’,
                                      ‘name’: ‘Tide HE’,
                                      ‘quantity’: 2,
                                      ‘tax’: ‘HST’,
                                      ‘retail_price’: 10.99
                                     },

Embedding                            {‘UPC’: ‘2348751987’,
- Analogous to a foreign key           ‘name’: ‘bananas’,
                                       ‘weight’: 3.5,
- Can be                               ‘UOM’: kg,
    - sub objects                    },
                                       ‘retail_price’: 2.75

    - collections                   ],


                                 ‘shipping_address’: {
                                   ‘street’: ‘1245 76 Ave.’,
References                         ‘city’: ‘Surrey’,
                                   ‘province’: ‘BC’,
                                   ‘postal code’: ‘V1Q 1K8‘
  - Analogous to a foreign key      }
  - Think “relationship”
                                 ‘subtotal’: 13.74
                                 }
and some basic operations
Querying
All the following queries will find the document.
                                                        { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
                                                        ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"),
                                                        ‘state’: ‘cart’,
By property value
                                                        ‘line_items’: [
   db.orders.find({‘state’: ‘cart’})                        {‘UPC’:885909377275’,
                                                             ‘name’: ‘Tide HE’,
                                                             ‘quantity’: 2,
                                                             ‘tax’: ‘HST’,
                                                             ‘retail_price’: 10.99
                                                            },

By embedded object property value
                                                            {‘UPC’: ‘2348751987’,
                                                              ‘name’: ‘bananas’,
  db.orders.find({‘shipping_address.province’: ‘BC’})         ‘weight’: 3.5,
                                                              ‘UOM’: kg,
                                                              ‘retail_price’: 2.75
                                                            },
                                                           ],
With comparison operators
                                                        ‘shipping_address’: {
                                                          ‘street’: ‘12345 76 Ave.’,
   db.orders.find({‘subtotal’: {$gt: 10})                 ‘city’: ‘Surrey’,
                                                          ‘province’: ‘BC’,
                                                          ‘postal code’: ‘V1Q 4K0‘
                                                           }

Values in collections (implicit “in”)                   ‘subtotal’: 13.74
                                                        }

  db.orders.find({‘line_items.UPC’: ‘885909377275’})
how to install mongo
you can have mongo on virtually any platform
(Windows, OS X, Linux, Solaris, FreeBSD)
mongo on Ubuntu in less than 5min
  add the 10gen GPG key
  sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10


  Open document /etc/apt/sources.list (sudo vim /etc/
  apt/sources.list). Add at the bottom
  deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist
  10gen


  Update source list and install package
  sudo apt-get update
  sudo apt-get install mongodb-10gen
basic mongo commands
 db.help() -- also db.help (no parentheses)
 show dbs -- show databases
 use -- for selecting database
 db.getCollectionNames()
 Since collections are schema-less, we don't
 explicitly need to create them. We can
 simply insert a document into a new
 collection. To do so, use the insert command,
 supplying it with the document to insert.
basic mongo commands
  use learn         <--- switched to db learn

  > db.getCollectionNames()

  [ ]

  > db.starwars.insert({name: 'C-3PO', gender:
  'robot', position: 'Protocol droid', homeworld:
  'Tatooine'})

  > db.getCollectionNames()

  [ "starwars", "system.indexes" ]

  What you're seeing is the name of the index, the
  database and collection it was created against
  and the fields included in the index
basic mongo commands

  > db.starwars.find()

  { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"),
  "name" : "C-3PO", "gender" : "robot",
  "position" : "Protocol droid", "homeworld" :
  "Tatooine" }

  > db.system.indexes.find()

  { "v" : 1, "key" : { "_id" : 1 }, "ns" :
  "learn.starwars", "name" : "_id_" }
Drupal & mongo
In Drupal 7 if you use field API you want your fields inside
mongodb. If you store them inside sql you cannot query them
efficiently.
Storing data into SQL will crete cases where you will run into
denormalization issues, and with mongo that will be solved.
In Drupal 7 everything is entity; nodes are entity, users are
entity, comments are entity.
We only need few system tables in MySQL that are hard-
wired with core drupal; but those things are cached
(memcache)
everything else can go to mongo. and they (mongo &
memcache) are easy to scale.
mongoDB module
http://drupal.org/project/mongodb
mongoDB module
     http://drupal.org/project/mongodb

mongodb: support library for the other modules
mongoDB module
     http://drupal.org/project/mongodb

mongodb: support library for the other modules
mongodb_cache: Store cache items in mongodb.
mongoDB module
     http://drupal.org/project/mongodb

mongodb: support library for the other modules
mongodb_cache: Store cache items in mongodb.
mongodb_field_storage: Store the fields in mongodb.
mongoDB module
     http://drupal.org/project/mongodb

mongodb: support library for the other modules
mongodb_cache: Store cache items in mongodb.
mongodb_field_storage: Store the fields in mongodb.
mongodb_session: Store sessions in mongodb.
mongoDB module
     http://drupal.org/project/mongodb

mongodb: support library for the other modules
mongodb_cache: Store cache items in mongodb.
mongodb_field_storage: Store the fields in mongodb.
mongodb_session: Store sessions in mongodb.
mongodb_watchdog: Store watchdog messages in
mongodb
mongoDB module
     http://drupal.org/project/mongodb

mongodb: support library for the other modules
mongodb_cache: Store cache items in mongodb.
mongodb_field_storage: Store the fields in mongodb.
mongodb_session: Store sessions in mongodb.
mongodb_watchdog: Store watchdog messages in
mongodb
mongodb_block: Store block information in
mongodb.
Very close to the core block API.
mongoDB module
mongoDB module
EntityFieldQuery Views
       Backend
http://drupal.org/
project/efq_views
This module enables Views to use
EntityFieldQuery as the query
backend, allowing you to query all
defined entity types and their fields,
even the ones stored in non-sql
storage such as mongodb.
Load into nodes into mongo
<?php
// Connect
$mongo = new Mongo();

// Get the database (it is created automatically)
$db = $mongo->testDatabase;

// Get the collection for nodes (it is created automatically)
$collection = $db->nodes;

// Get a listing of all of the node IDs
$r = db_query('SELECT nid FROM {node}');

// Loop through all of the nodes...

foreach($r as $row) {
  print "Writing node $row->nidn";

     // Load each node and convert it to an array.
     $node = (array)node_load($row->nid);

     // Store the node in MongoDB
     $collection->save($node);
     }
?>
code sample
# drush php-script mongoimport.php

# use testDatabase;
# db.nodes.find( {title: /Distineo/i} , {title: true}).limit(4);
code sample
# drush php-script mongoimport.php

# use testDatabase;
# db.nodes.find( {title: /Distineo/i} , {title: true}).limit(4);

// how to use mongo in php code
<?php
// Connect
$mongo = new Mongo();

// Write our search filter (same as shell example above)
$filter = array(
   'title' => new MongoRegex('/Distineo/i'),
);

// Run the query, getting only 5 results.
$res = $mongo->testDatabase->nodes->find($filter)->limit(5);

// Loop through and print the title of each article.
foreach ($res as $row) {
   print $row['title'] . PHP_EOL;
}
?>
Where mongo won’t
      work

Joining across Entities
ex. return birthday from profile
belonging to author of current node
DEMO
Q&A
Thanks for you patience
 enjoy rest of the day!
           :-)

More Related Content

What's hot

“Adoption DSpace 7 and 8 Challenges and Solutions from Real Migration Experie...
“Adoption DSpace 7 and 8 Challenges and Solutions from Real Migration Experie...“Adoption DSpace 7 and 8 Challenges and Solutions from Real Migration Experie...
“Adoption DSpace 7 and 8 Challenges and Solutions from Real Migration Experie...4Science
 
Need for Time series Database
Need for Time series DatabaseNeed for Time series Database
Need for Time series DatabasePramit Choudhary
 
O que é OpenShift ?
O que é OpenShift ?O que é OpenShift ?
O que é OpenShift ?Raul Leite
 
Big Data Analytics with Spark
Big Data Analytics with SparkBig Data Analytics with Spark
Big Data Analytics with SparkMohammed Guller
 
Data Streaming in Big Data Analysis
Data Streaming in Big Data AnalysisData Streaming in Big Data Analysis
Data Streaming in Big Data AnalysisVincenzo Gulisano
 
MongoDB & Hadoop - Understanding Your Big Data
MongoDB & Hadoop - Understanding Your Big DataMongoDB & Hadoop - Understanding Your Big Data
MongoDB & Hadoop - Understanding Your Big DataMongoDB
 
The Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialThe Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialJean-François Gagné
 
WebSphere application server 8.5.5 - quick overview
WebSphere application server 8.5.5 - quick overviewWebSphere application server 8.5.5 - quick overview
WebSphere application server 8.5.5 - quick overviewChris Sparshott
 
Introduction to Hadoop and Hadoop component
Introduction to Hadoop and Hadoop component Introduction to Hadoop and Hadoop component
Introduction to Hadoop and Hadoop component rebeccatho
 
introduction to sql server by moamen hany
introduction to sql server by moamen hanyintroduction to sql server by moamen hany
introduction to sql server by moamen hanyMoamen Hany ELNASHAR
 
Database management system of facebook
Database management system of facebookDatabase management system of facebook
Database management system of facebookSaidur Rahman
 
Choosing between Codership's MySQL Galera, MariaDB Galera Cluster and Percona...
Choosing between Codership's MySQL Galera, MariaDB Galera Cluster and Percona...Choosing between Codership's MySQL Galera, MariaDB Galera Cluster and Percona...
Choosing between Codership's MySQL Galera, MariaDB Galera Cluster and Percona...Codership Oy - Creators of Galera Cluster
 
MongoDB for Time Series Data: Schema Design
MongoDB for Time Series Data: Schema DesignMongoDB for Time Series Data: Schema Design
MongoDB for Time Series Data: Schema DesignMongoDB
 
Everything You Need to Know About HCL Notes 14
Everything You Need to Know About HCL Notes 14Everything You Need to Know About HCL Notes 14
Everything You Need to Know About HCL Notes 14panagenda
 
Introduction to redis - version 2
Introduction to redis - version 2Introduction to redis - version 2
Introduction to redis - version 2Dvir Volk
 

What's hot (20)

“Adoption DSpace 7 and 8 Challenges and Solutions from Real Migration Experie...
“Adoption DSpace 7 and 8 Challenges and Solutions from Real Migration Experie...“Adoption DSpace 7 and 8 Challenges and Solutions from Real Migration Experie...
“Adoption DSpace 7 and 8 Challenges and Solutions from Real Migration Experie...
 
Need for Time series Database
Need for Time series DatabaseNeed for Time series Database
Need for Time series Database
 
O que é OpenShift ?
O que é OpenShift ?O que é OpenShift ?
O que é OpenShift ?
 
SQOOP PPT
SQOOP PPTSQOOP PPT
SQOOP PPT
 
Big Data Analytics with Spark
Big Data Analytics with SparkBig Data Analytics with Spark
Big Data Analytics with Spark
 
Data Streaming in Big Data Analysis
Data Streaming in Big Data AnalysisData Streaming in Big Data Analysis
Data Streaming in Big Data Analysis
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystem
 
MongoDB & Hadoop - Understanding Your Big Data
MongoDB & Hadoop - Understanding Your Big DataMongoDB & Hadoop - Understanding Your Big Data
MongoDB & Hadoop - Understanding Your Big Data
 
Red Hat Satellite
Red Hat SatelliteRed Hat Satellite
Red Hat Satellite
 
The Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialThe Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication Tutorial
 
WebSphere application server 8.5.5 - quick overview
WebSphere application server 8.5.5 - quick overviewWebSphere application server 8.5.5 - quick overview
WebSphere application server 8.5.5 - quick overview
 
Introduction to Hadoop and Hadoop component
Introduction to Hadoop and Hadoop component Introduction to Hadoop and Hadoop component
Introduction to Hadoop and Hadoop component
 
introduction to sql server by moamen hany
introduction to sql server by moamen hanyintroduction to sql server by moamen hany
introduction to sql server by moamen hany
 
Hadoop Tutorial For Beginners
Hadoop Tutorial For BeginnersHadoop Tutorial For Beginners
Hadoop Tutorial For Beginners
 
Database management system of facebook
Database management system of facebookDatabase management system of facebook
Database management system of facebook
 
Choosing between Codership's MySQL Galera, MariaDB Galera Cluster and Percona...
Choosing between Codership's MySQL Galera, MariaDB Galera Cluster and Percona...Choosing between Codership's MySQL Galera, MariaDB Galera Cluster and Percona...
Choosing between Codership's MySQL Galera, MariaDB Galera Cluster and Percona...
 
MongoDB for Time Series Data: Schema Design
MongoDB for Time Series Data: Schema DesignMongoDB for Time Series Data: Schema Design
MongoDB for Time Series Data: Schema Design
 
Everything You Need to Know About HCL Notes 14
Everything You Need to Know About HCL Notes 14Everything You Need to Know About HCL Notes 14
Everything You Need to Know About HCL Notes 14
 
Introduction to redis - version 2
Introduction to redis - version 2Introduction to redis - version 2
Introduction to redis - version 2
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 

Similar to Optimize drupal using mongo db

MongoDB, E-commerce and Transactions
MongoDB, E-commerce and TransactionsMongoDB, E-commerce and Transactions
MongoDB, E-commerce and TransactionsSteven Francia
 
Retail referencearchitecture productcatalog
Retail referencearchitecture productcatalogRetail referencearchitecture productcatalog
Retail referencearchitecture productcatalogMongoDB
 
MongoDB World 2018: Tutorial - MongoDB & NodeJS: Zero to Hero in 80 Minutes
MongoDB World 2018: Tutorial - MongoDB & NodeJS: Zero to Hero in 80 MinutesMongoDB World 2018: Tutorial - MongoDB & NodeJS: Zero to Hero in 80 Minutes
MongoDB World 2018: Tutorial - MongoDB & NodeJS: Zero to Hero in 80 MinutesMongoDB
 
Building your First MEAN App
Building your First MEAN AppBuilding your First MEAN App
Building your First MEAN AppMongoDB
 
MongoDB in FS
MongoDB in FSMongoDB in FS
MongoDB in FSMongoDB
 
Hybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsHybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsSteven Francia
 
NoSQL and MongoDB Introdction
NoSQL and MongoDB IntrodctionNoSQL and MongoDB Introdction
NoSQL and MongoDB IntrodctionBrian Enochson
 
Simplifying & accelerating application development with MongoDB's intelligent...
Simplifying & accelerating application development with MongoDB's intelligent...Simplifying & accelerating application development with MongoDB's intelligent...
Simplifying & accelerating application development with MongoDB's intelligent...Maxime Beugnet
 
tranSMART Community Meeting 5-7 Nov 13 - Session 2: MongoDB: What, Why And When
tranSMART Community Meeting 5-7 Nov 13 - Session 2: MongoDB: What, Why And WhentranSMART Community Meeting 5-7 Nov 13 - Session 2: MongoDB: What, Why And When
tranSMART Community Meeting 5-7 Nov 13 - Session 2: MongoDB: What, Why And WhenDavid Peyruc
 
Nosql Now 2012: MongoDB Use Cases
Nosql Now 2012: MongoDB Use CasesNosql Now 2012: MongoDB Use Cases
Nosql Now 2012: MongoDB Use CasesMongoDB
 
MongoDB NoSQL database a deep dive -MyWhitePaper
MongoDB  NoSQL database a deep dive -MyWhitePaperMongoDB  NoSQL database a deep dive -MyWhitePaper
MongoDB NoSQL database a deep dive -MyWhitePaperRajesh Kumar
 
Novedades de MongoDB 3.6
Novedades de MongoDB 3.6Novedades de MongoDB 3.6
Novedades de MongoDB 3.6MongoDB
 
MongoDB - An Agile NoSQL Database
MongoDB - An Agile NoSQL DatabaseMongoDB - An Agile NoSQL Database
MongoDB - An Agile NoSQL DatabaseGaurav Awasthi
 
Webinar: When to Use MongoDB
Webinar: When to Use MongoDBWebinar: When to Use MongoDB
Webinar: When to Use MongoDBMongoDB
 
Keynote: New in MongoDB: Atlas, Charts, and Stitch
Keynote: New in MongoDB: Atlas, Charts, and StitchKeynote: New in MongoDB: Atlas, Charts, and Stitch
Keynote: New in MongoDB: Atlas, Charts, and StitchMongoDB
 
Building your first app with MongoDB
Building your first app with MongoDBBuilding your first app with MongoDB
Building your first app with MongoDBNorberto Leite
 

Similar to Optimize drupal using mongo db (20)

MongoDB, E-commerce and Transactions
MongoDB, E-commerce and TransactionsMongoDB, E-commerce and Transactions
MongoDB, E-commerce and Transactions
 
Retail referencearchitecture productcatalog
Retail referencearchitecture productcatalogRetail referencearchitecture productcatalog
Retail referencearchitecture productcatalog
 
MongoDB World 2018: Tutorial - MongoDB & NodeJS: Zero to Hero in 80 Minutes
MongoDB World 2018: Tutorial - MongoDB & NodeJS: Zero to Hero in 80 MinutesMongoDB World 2018: Tutorial - MongoDB & NodeJS: Zero to Hero in 80 Minutes
MongoDB World 2018: Tutorial - MongoDB & NodeJS: Zero to Hero in 80 Minutes
 
Building your First MEAN App
Building your First MEAN AppBuilding your First MEAN App
Building your First MEAN App
 
MongoDB in FS
MongoDB in FSMongoDB in FS
MongoDB in FS
 
Hybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsHybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS Applications
 
NoSQL and MongoDB Introdction
NoSQL and MongoDB IntrodctionNoSQL and MongoDB Introdction
NoSQL and MongoDB Introdction
 
Simplifying & accelerating application development with MongoDB's intelligent...
Simplifying & accelerating application development with MongoDB's intelligent...Simplifying & accelerating application development with MongoDB's intelligent...
Simplifying & accelerating application development with MongoDB's intelligent...
 
MongoDB
MongoDBMongoDB
MongoDB
 
tranSMART Community Meeting 5-7 Nov 13 - Session 2: MongoDB: What, Why And When
tranSMART Community Meeting 5-7 Nov 13 - Session 2: MongoDB: What, Why And WhentranSMART Community Meeting 5-7 Nov 13 - Session 2: MongoDB: What, Why And When
tranSMART Community Meeting 5-7 Nov 13 - Session 2: MongoDB: What, Why And When
 
CouchDB introduction
CouchDB introductionCouchDB introduction
CouchDB introduction
 
Nosql Now 2012: MongoDB Use Cases
Nosql Now 2012: MongoDB Use CasesNosql Now 2012: MongoDB Use Cases
Nosql Now 2012: MongoDB Use Cases
 
No SQL and MongoDB - Hyderabad Scalability Meetup
No SQL and MongoDB - Hyderabad Scalability MeetupNo SQL and MongoDB - Hyderabad Scalability Meetup
No SQL and MongoDB - Hyderabad Scalability Meetup
 
MongoDB NoSQL database a deep dive -MyWhitePaper
MongoDB  NoSQL database a deep dive -MyWhitePaperMongoDB  NoSQL database a deep dive -MyWhitePaper
MongoDB NoSQL database a deep dive -MyWhitePaper
 
Novedades de MongoDB 3.6
Novedades de MongoDB 3.6Novedades de MongoDB 3.6
Novedades de MongoDB 3.6
 
MongoDB - An Agile NoSQL Database
MongoDB - An Agile NoSQL DatabaseMongoDB - An Agile NoSQL Database
MongoDB - An Agile NoSQL Database
 
MediaGlu and Mongo DB
MediaGlu and Mongo DBMediaGlu and Mongo DB
MediaGlu and Mongo DB
 
Webinar: When to Use MongoDB
Webinar: When to Use MongoDBWebinar: When to Use MongoDB
Webinar: When to Use MongoDB
 
Keynote: New in MongoDB: Atlas, Charts, and Stitch
Keynote: New in MongoDB: Atlas, Charts, and StitchKeynote: New in MongoDB: Atlas, Charts, and Stitch
Keynote: New in MongoDB: Atlas, Charts, and Stitch
 
Building your first app with MongoDB
Building your first app with MongoDBBuilding your first app with MongoDB
Building your first app with MongoDB
 

Recently uploaded

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

Optimize drupal using mongo db

  • 2. agenda let’s get started what is problem that we face (or what we need/want) sql - relational databases shift of technologies - noSQL databases mongoDB - what is mongo how to install mongo finally - drupal & mongo mongoDB module - what we can do with it benefits q&a
  • 3. about me name: Vladimir Ilic employed at: OWFG email: v_ilic@hotmail.com t witter: burgerboydaddy
  • 4. Who should be here instead of me
  • 5. Who should be here instead of me
  • 6. Who should be here instead of me
  • 7. what is problem that we face or what we want to achieve with Drupal based solutions
  • 8. what is problem that we face or what we want to achieve with Drupal based solutions speed
  • 9. what is problem that we face or what we want to achieve with Drupal based solutions speed scale
  • 10. what is problem that we face or what we want to achieve with Drupal based solutions speed scale simplicity
  • 11. how we can do that? or how to speedup Drupal server side install Varnish for caching pages for anonymous users. install a persistent cache system (Memcached, APC, Memcache). use a CDN such as Akamai to ser ve static files (JavaScript, CSS, images).
  • 12. how to speedup drupal - code side use Pressflow, it allows Varnish to serve cached page for anonymous users. clean Drupal's watchdog table. Every time a watchdog error gets logged, it consumes CPU resources on the web ser ver and database server. It also increases load time significantly. implement static and persistent cache strategies until the slow query log comes up clean. avoid PHP errors that occur within nested foreach loops at all costs. uninstall unused modules. turn on caching for Drupal core blocks and Views.
  • 13. how to speedup drupal - database side Drupal sites live or die by their database. make sure the tables are properly indexed for faster searching. do not store unnecessary records, a 100 node database will be always accessed faster than a 3 million node database. change how/where you store your data
  • 14. speed - shift of technologies from Pentium 100MHz, 16MB RAM, 200 MB HDD to my cell phone: dual core 1GHz, 1GB RAM, 32GB storage or maybe some cloud ser ver with 32+ CPU’s, few TB RAM, ...
  • 17. our database technology 1974 - The relational database is created
  • 19. sql - relational dbs 1979
  • 20. sql - relational dbs 1979 1982-1996
  • 21. sql - relational dbs 1979 1982-1996 1995
  • 24. simplicity? * joins * joins * joins relational database model for eCommerce app
  • 25. real life example sell groceries Product { General Product id: attributes UPC: brand: description: MSRP: price: in-stock: ... PLU: 4011 unit of measure: lb Item Specific origin: BC attributes seasonal: yes ...
  • 26. real life example - but we also sell books Product { id: General Product UPC: attributes stay brand: description: the same MSRP: price: in-stock: ... author: Isaac Asimov Book Specific title: Foudation’s Edge attributes are binding: Paperback publication date: 1982 different publisher name: Spectra number of pages: 480 ISBN: 0553293389
  • 27. real life example - ops, we want more Product { General Product id: attributes stay the UPC: same brand: description: MSRP: price: in-stock: ... Clothing specific brand: Lee attributes are gender: Mens totally different ... make: Vintage style: Straight Cut and not consistent length: 34 across brands & width: 42 make color: Black material: Cotton ...
  • 30. shift of technologies - db solutions from well-established relational databases to NoSQL technologies. NoSQL was first introduced as concept in 1998, it really wasn’t until 2009 that it emerged as a real trend. NoSQL solutions aren't replacements traditional solutions, but rather address a specific need in addition to what one might get from traditional offerings. In 90% of the time you’ll probably implement a hybrid system. put simply, NoSQL is about being open and aware of alternative, existing and additional patterns and tools for managing your data.
  • 31. shift is happening now few years ago (and still now) MySQL was the undisputed king of the open-source database hill. It is still growing with great speed (40% compound annual grow rate) but There are some competitors that are emerging and grow even faster.
  • 34. shift is happening now 451 Research notes: "NoSQL database technologies are largely being adopted for new projects that require additional scalability, performance, relaxed consistency and agility."
  • 35. shift is happening now 451 Research notes: "NoSQL database technologies are largely being adopted for new projects that require additional scalability, in other words: performance, relaxed consistency and agility." web :-)
  • 37. what is Not Only SQL?
  • 38. what is Not Only SQL? •Non-Relational •Schema-Free •Distributed •Replication Support •Open-Source •Simple API •Horizontally •Eventually Scalable Consistent
  • 39. mongoDB agile and scalable DB designed for today MongoDB (from "humongous") is a scalable, high-performance, open source NoSQL database.
  • 40. what is mongo Application Document Oriented High { author: “vladimir”, date: new Date(), text: “drupal-MongoDB...”, Performance tags: [“tech”, “database”]} Fully Consistent Horizontally Scalable
  • 41. other features of MongoDB Document-based queries Flexible document queries expressed in JSON/Javascript. Map Reduce Flexible aggregation and data processing. Queries run in parallel on all shards. GridFS Store files of any size easily. Geospatial Indexing Find object based on location. (i.e. find closest n items to x) Many Production Deployments
  • 42. what is mongo Document oriented storage JSON-style documents with dynamic schemas offer simplicity and power. Full index support (+geo) Index on any attribute, just like you're used to. Replication and High Availability Mirror across LANs and WANs for scale and peace of mind. Querying Rich, document-based queries Fast In-Place Updates Map/Reduce
  • 43. mongoDB philosophy Keep functionality when we can (key/ value stores are great, but we need more) Non-relational (no joins) makes scaling horizontally practical Document data models are good Database technology should run anywhere VMs, cloud, etc
  • 44. 6 mongoDB concepts MongoDB has the same concept of a 'd atabase' with which you are likely already familiar (or a schema for you Oracle folks). Within a MongoDB instance you can have zero or more databases, each acting as high-level containers for everything else. A database can have zero or more 'c ollections'. A collection shares enough in common with a traditional 'table' that you can safely think of the t wo as the same thing. Collections are made up of zero or more 'documents'. Again, a document can safely be thought of as a 'row'.
  • 45. 6 mongoDB concepts A document is made up of one or more 'fields', which you can probably guess are a lot like 'c olumns'. 'Indexes' in MongoDB function much like their RDBMS counterparts. 'Cursors' are different than the other five concepts but they are important enough, and often overlooked, that I think they are worthy of their own discussion. The important thing to understand about cursors is that when you ask MongoDB for data, it returns a cursor, which we can do things to, such as counting or skipping ahead, without actually pulling down data.
  • 47. our eCommerce problem again { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"), ‘state’: ‘cart’, ‘line_items’: [ {‘UPC’:885909377275’, ‘name’: ‘Tide HE’, ‘quantity’: 2, ‘tax’: ‘HST’, ‘retail_price’: 10.99 }, {‘UPC’: ‘2348751987’, ‘name’: ‘bananas’, ‘weight’: 3.5, ‘UOM’: kg, ‘retail_price’: 2.75 }, ], ‘shipping_address’: { ‘street’: ‘1245 76 Ave.’, ‘city’: ‘Surrey’, ‘province’: ‘BC’, ‘postal code’: ‘V1Q 1K8‘ } ‘subtotal’: 13.74 }
  • 48. our eCommerce problem again { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"), Document ‘state’: ‘cart’, - Analogous to a row in RDBMS ‘line_items’: [ - Represented as JSON (BSON) {‘UPC’:885909377275’, ‘name’: ‘Tide HE’, ‘quantity’: 2, ‘tax’: ‘HST’, ‘retail_price’: 10.99 }, {‘UPC’: ‘2348751987’, ‘name’: ‘bananas’, ‘weight’: 3.5, ‘UOM’: kg, ‘retail_price’: 2.75 }, ], ‘shipping_address’: { ‘street’: ‘1245 76 Ave.’, ‘city’: ‘Surrey’, ‘province’: ‘BC’, ‘postal code’: ‘V1Q 1K8‘ } ‘subtotal’: 13.74 }
  • 49. our eCommerce problem again { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"), Document ‘state’: ‘cart’, - Analogous to a row in RDBMS ‘line_items’: [ - Represented as JSON (BSON) {‘UPC’:885909377275’, ‘name’: ‘Tide HE’, ‘quantity’: 2, ‘tax’: ‘HST’, ‘retail_price’: 10.99 }, Embedding {‘UPC’: ‘2348751987’, - Analogous to a foreign key ‘name’: ‘bananas’, ‘weight’: 3.5, - Can be ‘UOM’: kg, - sub objects }, ‘retail_price’: 2.75 - collections ], ‘shipping_address’: { ‘street’: ‘1245 76 Ave.’, ‘city’: ‘Surrey’, ‘province’: ‘BC’, ‘postal code’: ‘V1Q 1K8‘ } ‘subtotal’: 13.74 }
  • 50. our eCommerce problem again { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"), Document ‘state’: ‘cart’, - Analogous to a row in RDBMS ‘line_items’: [ - Represented as JSON (BSON) {‘UPC’:885909377275’, ‘name’: ‘Tide HE’, ‘quantity’: 2, ‘tax’: ‘HST’, ‘retail_price’: 10.99 }, Embedding {‘UPC’: ‘2348751987’, - Analogous to a foreign key ‘name’: ‘bananas’, ‘weight’: 3.5, - Can be ‘UOM’: kg, - sub objects }, ‘retail_price’: 2.75 - collections ], ‘shipping_address’: { ‘street’: ‘1245 76 Ave.’, ‘city’: ‘Surrey’, ‘province’: ‘BC’, ‘postal code’: ‘V1Q 1K8‘ } ‘subtotal’: 13.74 }
  • 51. our eCommerce problem again { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"), Document ‘state’: ‘cart’, - Analogous to a row in RDBMS ‘line_items’: [ - Represented as JSON (BSON) {‘UPC’:885909377275’, ‘name’: ‘Tide HE’, ‘quantity’: 2, ‘tax’: ‘HST’, ‘retail_price’: 10.99 }, Embedding {‘UPC’: ‘2348751987’, - Analogous to a foreign key ‘name’: ‘bananas’, ‘weight’: 3.5, - Can be ‘UOM’: kg, - sub objects }, ‘retail_price’: 2.75 - collections ], ‘shipping_address’: { ‘street’: ‘1245 76 Ave.’, ‘city’: ‘Surrey’, ‘province’: ‘BC’, ‘postal code’: ‘V1Q 1K8‘ } ‘subtotal’: 13.74 }
  • 52. our eCommerce problem again { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"), Document ‘state’: ‘cart’, - Analogous to a row in RDBMS ‘line_items’: [ - Represented as JSON (BSON) {‘UPC’:885909377275’, ‘name’: ‘Tide HE’, ‘quantity’: 2, ‘tax’: ‘HST’, ‘retail_price’: 10.99 }, Embedding {‘UPC’: ‘2348751987’, - Analogous to a foreign key ‘name’: ‘bananas’, ‘weight’: 3.5, - Can be ‘UOM’: kg, - sub objects }, ‘retail_price’: 2.75 - collections ], ‘shipping_address’: { ‘street’: ‘1245 76 Ave.’, References ‘city’: ‘Surrey’, ‘province’: ‘BC’, ‘postal code’: ‘V1Q 1K8‘ - Analogous to a foreign key } - Think “relationship” ‘subtotal’: 13.74 }
  • 53. our eCommerce problem again { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"), Document ‘state’: ‘cart’, - Analogous to a row in RDBMS ‘line_items’: [ - Represented as JSON (BSON) {‘UPC’:885909377275’, ‘name’: ‘Tide HE’, ‘quantity’: 2, ‘tax’: ‘HST’, ‘retail_price’: 10.99 }, Embedding {‘UPC’: ‘2348751987’, - Analogous to a foreign key ‘name’: ‘bananas’, ‘weight’: 3.5, - Can be ‘UOM’: kg, - sub objects }, ‘retail_price’: 2.75 - collections ], ‘shipping_address’: { ‘street’: ‘1245 76 Ave.’, References ‘city’: ‘Surrey’, ‘province’: ‘BC’, ‘postal code’: ‘V1Q 1K8‘ - Analogous to a foreign key } - Think “relationship” ‘subtotal’: 13.74 }
  • 54. and some basic operations Querying All the following queries will find the document. { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), ‘customer_id’: ObjectId("4fc19d5e5eec78a34f24653d"), ‘state’: ‘cart’, By property value ‘line_items’: [ db.orders.find({‘state’: ‘cart’}) {‘UPC’:885909377275’, ‘name’: ‘Tide HE’, ‘quantity’: 2, ‘tax’: ‘HST’, ‘retail_price’: 10.99 }, By embedded object property value {‘UPC’: ‘2348751987’, ‘name’: ‘bananas’, db.orders.find({‘shipping_address.province’: ‘BC’}) ‘weight’: 3.5, ‘UOM’: kg, ‘retail_price’: 2.75 }, ], With comparison operators ‘shipping_address’: { ‘street’: ‘12345 76 Ave.’, db.orders.find({‘subtotal’: {$gt: 10}) ‘city’: ‘Surrey’, ‘province’: ‘BC’, ‘postal code’: ‘V1Q 4K0‘ } Values in collections (implicit “in”) ‘subtotal’: 13.74 } db.orders.find({‘line_items.UPC’: ‘885909377275’})
  • 55. how to install mongo you can have mongo on virtually any platform (Windows, OS X, Linux, Solaris, FreeBSD) mongo on Ubuntu in less than 5min add the 10gen GPG key sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 Open document /etc/apt/sources.list (sudo vim /etc/ apt/sources.list). Add at the bottom deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen Update source list and install package sudo apt-get update sudo apt-get install mongodb-10gen
  • 56. basic mongo commands db.help() -- also db.help (no parentheses) show dbs -- show databases use -- for selecting database db.getCollectionNames() Since collections are schema-less, we don't explicitly need to create them. We can simply insert a document into a new collection. To do so, use the insert command, supplying it with the document to insert.
  • 57. basic mongo commands use learn <--- switched to db learn > db.getCollectionNames() [ ] > db.starwars.insert({name: 'C-3PO', gender: 'robot', position: 'Protocol droid', homeworld: 'Tatooine'}) > db.getCollectionNames() [ "starwars", "system.indexes" ] What you're seeing is the name of the index, the database and collection it was created against and the fields included in the index
  • 58. basic mongo commands > db.starwars.find() { "_id" : ObjectId("4fc19d5e0ddc54e49b84928c"), "name" : "C-3PO", "gender" : "robot", "position" : "Protocol droid", "homeworld" : "Tatooine" } > db.system.indexes.find() { "v" : 1, "key" : { "_id" : 1 }, "ns" : "learn.starwars", "name" : "_id_" }
  • 59. Drupal & mongo In Drupal 7 if you use field API you want your fields inside mongodb. If you store them inside sql you cannot query them efficiently. Storing data into SQL will crete cases where you will run into denormalization issues, and with mongo that will be solved. In Drupal 7 everything is entity; nodes are entity, users are entity, comments are entity. We only need few system tables in MySQL that are hard- wired with core drupal; but those things are cached (memcache) everything else can go to mongo. and they (mongo & memcache) are easy to scale.
  • 61. mongoDB module http://drupal.org/project/mongodb mongodb: support library for the other modules
  • 62. mongoDB module http://drupal.org/project/mongodb mongodb: support library for the other modules mongodb_cache: Store cache items in mongodb.
  • 63. mongoDB module http://drupal.org/project/mongodb mongodb: support library for the other modules mongodb_cache: Store cache items in mongodb. mongodb_field_storage: Store the fields in mongodb.
  • 64. mongoDB module http://drupal.org/project/mongodb mongodb: support library for the other modules mongodb_cache: Store cache items in mongodb. mongodb_field_storage: Store the fields in mongodb. mongodb_session: Store sessions in mongodb.
  • 65. mongoDB module http://drupal.org/project/mongodb mongodb: support library for the other modules mongodb_cache: Store cache items in mongodb. mongodb_field_storage: Store the fields in mongodb. mongodb_session: Store sessions in mongodb. mongodb_watchdog: Store watchdog messages in mongodb
  • 66. mongoDB module http://drupal.org/project/mongodb mongodb: support library for the other modules mongodb_cache: Store cache items in mongodb. mongodb_field_storage: Store the fields in mongodb. mongodb_session: Store sessions in mongodb. mongodb_watchdog: Store watchdog messages in mongodb mongodb_block: Store block information in mongodb. Very close to the core block API.
  • 69. EntityFieldQuery Views Backend http://drupal.org/ project/efq_views This module enables Views to use EntityFieldQuery as the query backend, allowing you to query all defined entity types and their fields, even the ones stored in non-sql storage such as mongodb.
  • 70. Load into nodes into mongo <?php // Connect $mongo = new Mongo(); // Get the database (it is created automatically) $db = $mongo->testDatabase; // Get the collection for nodes (it is created automatically) $collection = $db->nodes; // Get a listing of all of the node IDs $r = db_query('SELECT nid FROM {node}'); // Loop through all of the nodes... foreach($r as $row) { print "Writing node $row->nidn"; // Load each node and convert it to an array. $node = (array)node_load($row->nid); // Store the node in MongoDB $collection->save($node); } ?>
  • 71. code sample # drush php-script mongoimport.php # use testDatabase; # db.nodes.find( {title: /Distineo/i} , {title: true}).limit(4);
  • 72. code sample # drush php-script mongoimport.php # use testDatabase; # db.nodes.find( {title: /Distineo/i} , {title: true}).limit(4); // how to use mongo in php code <?php // Connect $mongo = new Mongo(); // Write our search filter (same as shell example above) $filter = array( 'title' => new MongoRegex('/Distineo/i'), ); // Run the query, getting only 5 results. $res = $mongo->testDatabase->nodes->find($filter)->limit(5); // Loop through and print the title of each article. foreach ($res as $row) { print $row['title'] . PHP_EOL; } ?>
  • 73. Where mongo won’t work Joining across Entities ex. return birthday from profile belonging to author of current node
  • 74. DEMO
  • 75. Q&A
  • 76. Thanks for you patience enjoy rest of the day! :-)

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. Pressflow is a distribution of Drupal with integrated performance, scalability, availability, and testing&amp;#xA0;enhancements.\nGreat for Drupal 6, but in case of Drupal 7 just some minor setting changes.\nPressflow addresses a long-standing problem: High-traffic sites use stable versions of Drupal, and stable versions of Drupal are ineligible for enhancements to solve performance bottlenecks discovered after widespread&amp;#xA0;deployment.\n\n
  11. Drupal sites live or die by their database. - I think that every Drupal developer (module dev) should have this printed and hanged over his desk.\n
  12. \n
  13. see this image, that was first class computer from the time when...\nyeah, when first relational database was created.\n
  14. see this image, that was first class computer from the time when...\nyeah, when first relational database was created.\n
  15. Remember in 1995 there were around 10,000 websites. Mosiac, Lynx, Mozilla (pre netscape) and IE 2.0 were the only web browsers. \nApache (Dec &amp;#x2019;95), Java (&amp;#x2019;96), PHP (June &amp;#x2019;95), and .net didn&amp;#x2019;t exist yet. Linux just barely (1.0 in &amp;#x2019;94)\n
  16. Remember in 1995 there were around 10,000 websites. Mosiac, Lynx, Mozilla (pre netscape) and IE 2.0 were the only web browsers. \nApache (Dec &amp;#x2019;95), Java (&amp;#x2019;96), PHP (June &amp;#x2019;95), and .net didn&amp;#x2019;t exist yet. Linux just barely (1.0 in &amp;#x2019;94)\n
  17. Remember in 1995 there were around 10,000 websites. Mosiac, Lynx, Mozilla (pre netscape) and IE 2.0 were the only web browsers. \nApache (Dec &amp;#x2019;95), Java (&amp;#x2019;96), PHP (June &amp;#x2019;95), and .net didn&amp;#x2019;t exist yet. Linux just barely (1.0 in &amp;#x2019;94)\n
  18. please take this question mark with grain of salt. We still use this models as they work (more or less) and decades of development created bitten path that everyone knows.\n- Once you have related data, you need joins\n- Indexing on joints does not work that well\n... So you:\n- Introduce denormalization\n- Build extra tables\n\n
  19. please take this question mark with grain of salt. We still use this models as they work (more or less) and decades of development created bitten path that everyone knows.\n- Once you have related data, you need joins\n- Indexing on joints does not work that well\n... So you:\n- Introduce denormalization\n- Build extra tables\n\n
  20. \n
  21. \n
  22. \n
  23. \n
  24. Nothing could be more representative of this sudden shift than the progress of NoSQL technologies against well-established relational databases. It almost seems like one day the web was being driven by a few RDBMS&apos; and the next, five or so NoSQL solutions had established themselves as worthy solutions.\n\nAs a document-oriented database, Mongo is a more generalized NoSQL solution. It should be viewed as an alternative to relational databases. Like relational databases, it too can benefit from being paired with some of the more specialized NoSQL solutions. MongoDB has advantages and drawbacks\n
  25. - Where NoSQL poses a clear and present danger to MySQL is in the web application market where MySQL has made its name. Few are going to rip and replace a database for existing applications, but new applications are increasingly going the NoSQL route. As 451 Research notes: &quot;NoSQL database technologies are largely being adopted for new projects that require additional scalability, performance, relaxed consistency and agility.&quot;\n- From no real alternatives to MySQL to an overabundance, and in just two years. That&apos;s an amazingly fast shift, and it says a great deal about how open source drives innovation.\n
  26. - Where NoSQL poses a clear and present danger to MySQL is in the web application market where MySQL has made its name. Few are going to rip and replace a database for existing applications, but new applications are increasingly going the NoSQL route. As 451 Research notes: &quot;NoSQL database technologies are largely being adopted for new projects that require additional scalability, performance, relaxed consistency and agility.&quot;\n\n- From no real alternatives to MySQL to an overabundance, and in just two years. That&apos;s an amazingly fast shift, and it says a great deal about how open source drives innovation.\n
  27. - Where NoSQL poses a clear and present danger to MySQL is in the web application market where MySQL has made its name. Few are going to rip and replace a database for existing applications, but new applications are increasingly going the NoSQL route. As 451 Research notes: &quot;NoSQL database technologies are largely being adopted for new projects that require additional scalability, performance, relaxed consistency and agility.&quot;\n\n- From no real alternatives to MySQL to an overabundance, and in just two years. That&apos;s an amazingly fast shift, and it says a great deal about how open source drives innovation.\n
  28. - Where NoSQL poses a clear and present danger to MySQL is in the web application market where MySQL has made its name. Few are going to rip and replace a database for existing applications, but new applications are increasingly going the NoSQL route. As 451 Research notes: &quot;NoSQL database technologies are largely being adopted for new projects that require additional scalability, performance, relaxed consistency and agility.&quot;\n\n- From no real alternatives to MySQL to an overabundance, and in just two years. That&apos;s an amazingly fast shift, and it says a great deal about how open source drives innovation.\n
  29. \n
  30. \n
  31. MongoDB is a high performance NoSQL database that is significantly faster than mysql for reads and writes. \n
  32. Document-oriented storage\nJSON-style documents with dynamic schemas offer simplicity and power.\n(JSON - JavaScript Object Notation, is a lightweight text-based open standard designed for human-readable data interchange. It is derived from the JavaScript scripting language for representing simple data structures and associative arrays, called objects. Despite its relationship to JavaScript, it is language-independent, with parsers available for many languages.)\n\nFull Index Support\nIndex on any attribute, just like you&apos;re used to.\n\nReplication &amp; High Availability\nMirror across LANs and WANs for scale and peace of mind.\n\nAuto-Sharding\nScale horizontally without compromising functionality.\n\nQuerying\nRich, document-based queries.\n\nFast In-Place Updates\nAtomic modifiers for contention-free performance.\n\nMap/Reduce\nFlexible aggregation and data processing.\n\nGridFS\nStore files of any size without complicating your stack.\n\nCommercial Support\nEnterprise class support, training, and consulting available.\n
  33. MapReduce is a framework for processing embarrassingly parallel problems across huge datasets using a large number of computers (nodes), collectively referred to as a cluster (if all nodes are on the same local network and use similar hardware) or a grid (if the nodes are shared across geographically and administratively distributed systems, and use more heterogenous hardware). Computational processing can occur on data stored either in a filesystem (unstructured) or in a database (structured).\n
  34. Document-oriented storage\nJSON-style documents with dynamic schemas offer simplicity and power.\n\nFull Index Support\nIndex on any attribute, just like you&apos;re used to.\n\nReplication &amp; High Availability\nMirror across LANs and WANs for scale and peace of mind.\n\nAuto-Sharding\nScale horizontally without compromising functionality.\n\nQuerying\nRich, document-based queries.\n\nFast In-Place Updates\nAtomic modifiers for contention-free performance.\n\nMap/Reduce\nFlexible aggregation and data processing.\n\nGridFS\nStore files of any size without complicating your stack.\n\nCommercial Support\nEnterprise class support, training, and consulting available.\n
  35. By reducing transactional semantics the db provides, one can still solve an interesting set of problems where performance is very important, and horizontal scaling then becomes easier.\n\n
  36. \n
  37. a.To recap, MongoDB is made up of&amp;#xA0;databases&amp;#xA0;which contain&amp;#xA0;collections. A&amp;#xA0;collection&amp;#xA0;is made up of&amp;#xA0;documents. Each&amp;#xA0;document&amp;#xA0;is made up of&amp;#xA0;fields.&amp;#xA0;Collections&amp;#xA0;can be&amp;#xA0;indexed, which improves lookup and sorting performance. Finally, when we get data from MongoDB we do so through a&amp;#xA0;cursor&amp;#xA0;whose actual execution is delayed until necessary.\nb.You might be wondering, why use new terminology (collection vs. table, document vs. row and field vs. column). Is it just to make things more complicated? The truth is that while these concepts are similar to their relational database counterparts, they are not identical. The core difference comes from the fact that relational databases define&amp;#xA0;columns&amp;#xA0;at the&amp;#xA0;table&amp;#xA0;level whereas a document-oriented database defines its&amp;#xA0;fields&amp;#xA0;at the&amp;#xA0;document&amp;#xA0;level. That is to say that each&amp;#xA0;document&amp;#xA0;within a&amp;#xA0;collection&amp;#xA0;can have its own unique set of&amp;#xA0;fields. As such, a&amp;#xA0;collection&amp;#xA0;is a dumbed down container in comparison to a&amp;#xA0;table, while a&amp;#xA0;document&amp;#xA0;has a lot more information than a&amp;#xA0;row.\nc.Ultimately, the point is that a collection isn&apos;t strict about what goes in it (it&apos;s schema-less). Fields are tracked with each individual document. The benefits and drawbacks of this&amp;#xA0;\n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. you can do the same thing manually, but in that case you need to deal with all aliases, scripts, starting db as service, etc (recommended for unix admin &amp; prod env).\nafter this do not forget to install mongo driver for php (additional few commands).\n
  47. \n
  48. \n
  49. \n
  50. Traditionally if you want something (some property) from node, you run query that filters all the properties that belongs to the node and fish out all the fields from all these tables that you are interested in.\nIn Drupal 7 this is slow way.\nIn Drupal 7 regardless to mongo what you want to do is to grab node id, user id, term ids, and to run multiple runs agains them because you have entity cache and all this things instead to come from various sql tables will come as one blob from memcache. And that is way faster.\n\n
  51. Cache backend (not big deal)\n- Field_storage (Oh yes)\nIn Drupal 7 we store every field in different table. That is not going to be good from performance point of view\n- Session - lots of writes moved to mongo\n- Watchdog \n- Block\n- Queue\nBIG, BIG THING IS FIELDS_STORAGE!!!\n
  52. Cache backend (not big deal)\n- Field_storage (Oh yes)\nIn Drupal 7 we store every field in different table. That is not going to be good from performance point of view\n- Session - lots of writes moved to mongo\n- Watchdog \n- Block\n- Queue\nBIG, BIG THING IS FIELDS_STORAGE!!!\n
  53. Cache backend (not big deal)\n- Field_storage (Oh yes)\nIn Drupal 7 we store every field in different table. That is not going to be good from performance point of view\n- Session - lots of writes moved to mongo\n- Watchdog \n- Block\n- Queue\nBIG, BIG THING IS FIELDS_STORAGE!!!\n
  54. Cache backend (not big deal)\n- Field_storage (Oh yes)\nIn Drupal 7 we store every field in different table. That is not going to be good from performance point of view\n- Session - lots of writes moved to mongo\n- Watchdog \n- Block\n- Queue\nBIG, BIG THING IS FIELDS_STORAGE!!!\n
  55. Cache backend (not big deal)\n- Field_storage (Oh yes)\nIn Drupal 7 we store every field in different table. That is not going to be good from performance point of view\n- Session - lots of writes moved to mongo\n- Watchdog \n- Block\n- Queue\nBIG, BIG THING IS FIELDS_STORAGE!!!\n
  56. Cache backend (not big deal)\n- Field_storage (Oh yes)\nIn Drupal 7 we store every field in different table. That is not going to be good from performance point of view\n- Session - lots of writes moved to mongo\n- Watchdog \n- Block\n- Queue\nBIG, BIG THING IS FIELDS_STORAGE!!!\n
  57. Updated just few days ago (possible for this presentation).\nCheck discrepancy between number of downloads and reported installs. More than 130x!!! \nNote: there is big possibility that everyone who use mongodb has update module turned off, but anyway...\n\nAs per 451 research; 49% of survey respondents abandoning MySQL planned on retaining or adopting NoSQL databases. --&gt; only 12.7% said they had actually deployed NoSQL db as direct replacement for MySQL.\n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n