SlideShare una empresa de Scribd logo
1 de 169
Descargar para leer sin conexión
CouchDB
     relax
CouchDB
     relax
 Sander van de Graaf
     @svdgraaf
http://joind.in/talk/view/3009
RELAX
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff (GeoCouch!)
CouchDB
     relax
NOSQL
IT’S A MOVEMENT
1998
Carlo Strozzi
NOSQL == Not Only SQL
“[The NoSQL movement] departs from the relational
model altogether, it should therefore have been called
more appropriately ‘NoREL’, or something to that
effect.”
                                         - Carlo Strozzi
CouchDB
     relax
NUTSHELL
SPEED
APPEND ONLY
NO REPAIR NEEDED
COMPACTING
HTTP SERVER
CAP
CouchDB




 CAP
CouchDB




EVENTUALLY CONSISTENT
FULL REST API
HTTP METHODS
• GET            • SELECT

• PUT            • UPDATE

• POST           • INSERT

• DELETE         • DELETE

• COPY           • ...
{
    "total_rows": 2,
    "offset": 0,
    "rows": [
        {
            "id": "abc089b91fadfcf67a438e73f426f71d",
            "key": [
                "2011-05-07 13:52:15",
                "abc089b91fadfcf67a438e73f426f71d"
            ],
            "value": {
                "_id": "abc089b91fadfcf67a438e73f426f71d",
                "_rev": "2-a38e08996586cd774b0b5c3006659de0",
                "message": "A2 HUISARTSENPOST BARNEVELD NIJKERKERWEG 119 3771LA 119"
            }
        },
        {
            "id": "abc089b91fadfcf67a438e73f4286fd5",
            "key": [
                "2011-05-07 14:00:16",
                "abc089b91fadfcf67a438e73f4286fd5"
            ],
            "value": {
                "_id": "abc089b91fadfcf67a438e73f4286fd5",
                "_rev": "2-691929b5f3d6cde58f27d62681c7b599",
                "message": "A1 LEEUWERIKSWEIDE 183 WAGENINGEN 6708LH 183"
            }
        }
    ]
}
REPLICATION
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
RELAX
PHP USAGE
PHP LIBRARIES

• PHPillow   (LGPL)

• PHP   Object Freezer (BSD)

• PHP   On Couch (GPL 2 / 3)

• PHP   CouchDB Extension (PHP license)

• SAG   for CouchDB (apache)

• Doctrine   2 CouchDB ODM
PHP ON COUCH
<?PHP
// setup connection for couchdb
$client = new Couchdb_Client('http://ponies.couchone.com:5984','rainbows');

// fetch a document
$doc = $client->getDoc('awesome_pony');

// updating document
$doc->type = "awesome";

try {
  $client->storeDoc($doc);
}
catch (Exception $e) {
  echo "Document storage failed : " . $e->getMessage();
}
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
REPLICATION
DEFINITION


“Replication is the process of sharing information so
as to ensure consistency between redundant
resources, such as software or hardware components,
to improve reliability, fault-tolerance, or accessibility.”

                                                   Source: wikipedia
CouchDB
     relax
CouchDB
     relax
             CouchDB
                  relax
CouchDB
                  relax




CouchDB
     relax
             CouchDB
                  relax




             CouchDB
                  relax
CouchDB
     relax
             CouchDB
                  relax
CouchDB
                  relax




CouchDB
     relax




             CouchDB
                  relax
US   NL


                  CouchDB
                       relax




CouchDB
     relax
             BE


                  CouchDB
                       relax
USE CASE
 IDG Publishers
IDG US                                              IDG AUSTRALIA


             CouchDB
                  relax




CouchDB
     relax
             CouchDB
                  relax
                          CouchDB
                               relax
                                       CouchDB
                                            relax




             CouchDB
                  relax
                                       CouchDB
                                            relax
  IDG NL                                                 IDG DE
IDG DE       IDG Italy   IDG Poland     IDG Hungary




IDG NL       IDG US      IDG Romania    IDG Sweden




IDG Brazil   IDG UK      IDG Spania     IDG Portugal




IDG Ghana    IDG Japan   IDG Thailand   IDG Vietnam
IMPLICATION
    Every single bit of IDG content published
worldwide, is available anywhere, anytime in msec.
P2P WEB
“World Domination”
HOW DO I DO THAT?
CLUSTERING
  “The fun stuff ”
loadbalancer




                            ...n
CouchDB
     relax
               CouchDB
                    relax
CHALLENGES

• Large   amounts of data

• Large   views (with big/long map/reduce queries)

• LOTS    of traffic

• Location   based partitions

• For   fun and profit
MAP/REDUCE
INPUT
      IP                 Bytes
212.122.174.13           18271
212.122.174.13           191726
212.122.174.13            198
 74.119.8.111            91272
 74.119.8.111             8371
212.122.174.13             43
MAPPER => REDUCER
      IP         Bytes
                 18271
                 191726
212.122.174.13
                  198
                   43
                 91272
 74.119.8.111
                  8371
AFTER REDUCE
      IP          Bytes



212.122.174.13   210238




 74.119.8.111    99643
PARTITION INPUT
Partition           IP         Bytes
   0          212.122.174.13   18271
   0          212.122.174.13   191726
   0          212.122.174.13    198
   1           74.119.8.111    91272
   1           74.119.8.111     8371
   0          212.122.174.13     43
MAPPER => REDUCER
Partition         IP         Bytes
                             18271
                             191726
   0        212.122.174.13
                              198
                               43
                             91272
   1         74.119.8.111
                              8371
AFTER REDUCE
      IP          Bytes



212.122.174.13   210238




 74.119.8.111    99643
CLUSTERING OPTIONS


• CouchDB    Lounge

• Pillow

• BigCouch
LOUNGE

• partitioning/clustering

• Nginx    module

• meebo.com

• ‘easy’

• http://tilgovi.github.com/couchdb-lounge/
LOUNGE


• dumb_proxy      => proxy for simple PUT/GET’s

• smart_proxy     => proxy for map/reduce over shards

• replicator   => updates all copies, redundantly
nginx
             dumb_proxy




                           ...n
CouchDB
     relax
              CouchDB
                   relax
nginx
             smart_proxy




                           ...n
CouchDB
     relax
              CouchDB
                   relax
Bonus:

other nginx modules work too
PILLOW

• Erlang   based

• router/rereducer   (map/reduce over multiple
 systems)

• In   development (but promising!)

• https://github.com/khellan/Pillow
BIGCOUCH

• Fork

• 100%   api compatible

• Open   Source/Commercial

• https://cloudant.com/#!/solutions/bigcouch
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
BACKEND USAGE
PROXIED




 CouchDB
      relax
DIRECT




     CouchDB
          relax
NOSQL && SQL HYBRID

• onSave, onCommit      hooks available in every major framework

• onSave -> make a JSON representation of your object, and
 PUT it to couchdb (#protip: only ‘public’ data)

• sql   db is leading, you don’t care about versioning in couchdb

• youcan use your data directly from couchdb within your
 frontend javascript
MODEL
<?php

class Pony extends Application_models
{
  public function toArray()
  {
    $data = $this->_getData();

        // we don't want any private data pushed
        unset($data['created_on']);
        unset($data['created_by']);
        unset($data['access_level']);
        unset($data['private_data']);

        $data['tags'] = $this->getTags();
        $data['categories'] = $this->getCategories();
        $data['rainbows'] = 'double';
        return $data;
    }
}
AFTER_SAVE
<?php

class article_module extends admin_module
{
  public function after_save()
  {
    parent::after_save();
    $data = $this->toJson();

        // store the document in couchdb
        $res = CouchDB::put($data);

        // set the local id and revision, so we can
        // use it the next time
        $this->_id = $res->_id;
        $this->_rev = $res->_rev;
    }
}
PROXY



RewriteEngine On
RewriteRule /data/(.*)   http://127.0.0.1:5984/db/$1 [P,L]
JSONP

?callback=foobar




  foobar(...)
JAVASCRIPT
<script type="text/javascript">
$.getJSON("/db/ponies/_design/ponies/_view/best-ponies?include_docs=true",
function(res){
  for(i in res.rows)
  {
    doc = res.rows[i].doc;
    // do stuff
  }
});
</script>
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
COUCHAPP
“Distributed, scalable, web
    applications you say?
omgwtfbbq!?!1!!!one1!1!eleven”
_attachments
CouchDB
                  relax




CouchDB
     relax




             CouchDB
                  relax
INSTALLATION




  Couchapp 0.7.5
$ couchapp init
LAYOUT
$ couchapp push http://ponies.couchone.com:5984/rainbows
get your own copy:

$ couchapp clone http://svdgraaf.couchone.com/couchappdemo/_design/↩
                            phpday phpday
https://github.com/brandon-beacher/couchapp-tmbundle
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
OTHER STUFF
REWRITES
_REWRITE
STEP 1


$ curl "http://ponies.couchone.com/rainbows/_design/ponies/
  _view/best-ponies?descending=true&limit=5&key=”foobar”"
STEP 1
{
    ....
    "rewrites": [{
        "from": "/best-5-ponies",
        "to": "ponies/_view/best-ponies",
        "method": "GET",
        "query": {
           "descending": true,
           "limit": 5,
           "key": "foobar"
         }
    }]
}
STEP 1


$ curl "http://ponies.couchone.com/rainbows/_design/ponies/
  _view/best-ponies?descending=true&limit=5&key=”foobar”"
STEP 1


$ curl "http://ponies.couchone.com/rainbows/_design/ponies/
                  _rewrite/best-5-ponies"
STEP 2


[vhosts]
awesomeponies.com = /rainbows/_design/ponies/_rewrite
STEP 2


$ curl "http://ponies.couchone.com/rainbows/_design/ponies/
_rewrite/best-5-ponies"
STEP 2


$ curl "http://awesomeponies.com/best-5-ponies"
_CHANGES
RELAX
$ curl -X GET "http://ponies.couchone.com/rainbows/_changes"
{"results":[

], "last_seq":0}
curl -X PUT http://ponies.couchone.come/rainbows/foobar -d '{"type":"awesome"}'
{"results":[
  {
    "seq":1,
    "id":"foobar",
    "changes":[{"rev":"1-aaa8e2a031bca334f50b48b6682fb486"}]
  }
], "last_seq":1}
{"results":[
  {
    "seq":1,
    "id":"foobar",
    "changes":[{"rev":"1-aaa8e2a031bca334f50b48b6682fb486"}]
  },
  {
    "seq":2,
    "id":"foobar2",
    "changes":[{"rev":"1-e18422e6a82d0f2157d74b5dcf457997"}]
  }
], "last_seq":2}
_CHANGES OPTIONS

• ?since

• Longpolling

• Continuous
SINCE


$ curl -X GET "http://ponies.couchone.com/rainbows/_changes?since=20"
LONGPOLLING


curl -X GET "http://ponies.couchone.com/rainbows/_changes?feed=longpoll&since=2"
CONTINOUS


curl -X GET "http://ponies.couchone.com/rainbows/_changes?feed=continuous&since=2"
FILTERS
FILTERS/IMPORTANT.JS

    function(doc, req) {
      if(doc.priority == 'high')
      {
        return true;
      }
      return false;
    }
$ curl -X GET
"http://ponies.couchone.com/rainbows/_changes?feed=continuous&filter=app/important
FILTERS/CITY.JS

function(doc, req) {
  if(doc.city.name == req.query.name) {
    return true;
  }
  return false;
}
curl -X GET
"http://ponies.couchone.com/rainbows/_changes?feed=continuous&filter=app/name&name=verona
SHOWS
function(doc, req) {
  return {
    body: "Hello World"
  }
}
curl -X
"http://db.example.com/db/_design/foobar/_show/showfunction/docid"
function(doc) {
  return {
    "code": 302,
    "body": "See other",
    "headers": {
       "Location": doc.target
     }
  };
}
USE CASE
  CDN
From public hash to private file

        /m/m1gz4l4a1clb.jpg



a2d85de382c8672925174e731a1d2a89
storage
                                    (http based)




                                           5
    Varnish       proprietary       middleware

1             2   webserver
                                3



                                           4
                                          mysql
storage
                                              (http based)




                                      4

    Varnish       nginx + mod_cache

1             2                           3



                                              middleware
function(doc) {
  return {
    "code": 302,
    "body": "See other",
    "headers": {
       "Location": doc.target
     }
  };
}
{
    "_id": "m1gz4l4a1clb",
    "_rev": "2-d7855bba9445f446c0b71f044e796c28",
    "content-type": "image/jpeg",
    "target": "http://10.16.10.1/a2d85de382c8672925174e731a1d2a89",
}
LUCENE
[external]
fti=/path/to/python /path/to/couchdb-lucene/tools/couchdb-external-hook.py

[httpd_db_handlers]
_fti = {couch_httpd_external, handle_external_req, <<"fti">>}
FULLTEXT/BY_MESSAGE/BY_QUERY.JS


     function(doc) {
       var ret=new Document();
       ret.add(doc.message);
       ret.add(new Date(doc.datetime));
       return ret;
     }
curl -X GET
"http://db.example.com/db/_fti/_design/app/by-query?q=foobar"
GEOCOUCH
https://github.com/vmx/couchdb
GEOCOUCH

• Supports    bbox, polygon, lines, etc.

• fork   (for now)

• outputs    via lists, georss possible

• directly   useable by google maps

• can    read GIS data

• combined     with _changes makes interesting use cases possible
SPATIAL INDEX
                             in spatial/points.js



function(doc) {
  if (doc.geo && doc.geo.latitude != '' && doc.geo.longitude != '')   {
    emit( {
          type: "Point",
          coordinates: [
            parseFloat(doc.geo.latitude),
            parseFloat(doc.geo.longitude)
          ]
       },
       [
          doc._id,
          doc
       ]
    );
  }
}
SPATIAL INDEX
                             in spatial/points.js



function(doc) {
  if (doc.geo && doc.geo.latitude != '' && doc.geo.longitude != '')   {
    emit( {
          type: "Point",
          coordinates: [
            parseFloat(doc.geo.latitude),
            parseFloat(doc.geo.longitude)
          ]
       },
      [
          doc._id,
          doc
       ]
    );
  }
}
SPATIAL INDEX
                             in spatial/points.js



function(doc) {
  if (doc.geo && doc.geo.latitude != '' && doc.geo.longitude != '')   {
    emit( {
          type: "Point",
          coordinates: [
            parseFloat(doc.geo.latitude),
            parseFloat(doc.geo.longitude)
          ]
       },
       [
          doc._id,
          doc
       ]
    );
  }
}
Worldwide search
http://db.example.com/couchappdemo/_design/phpday/_spatial/points?bbox=0,0,180,90




  {"update_seq":3,"rows":[
    {
      "id":"Verona",
      "bbox":[10.991748,45.438367,10.991748,45.438367],
      "value":[
         "Verona",
         [10.991748,45.438367]
       ]
    }]
  }
bbox=west,south,east,north
COUCHDB FOR IOS




https://github.com/couchbaselabs/iOS-Couchbase
http://www.iriscouch.com/
http://www.couchbase.com/downloads
Q?
http://joind.in/talk/view/3009

Más contenido relacionado

Similar a Advanced CouchDB phpday.it

Docker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudDocker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudSamuel Chow
 
Getting started with Docker sandboxes for MariaDB
Getting started with Docker sandboxes for MariaDBGetting started with Docker sandboxes for MariaDB
Getting started with Docker sandboxes for MariaDBMariaDB plc
 
Practical introduction to dev ops with chef
Practical introduction to dev ops with chefPractical introduction to dev ops with chef
Practical introduction to dev ops with chefLeanDog
 
The age of orchestration: from Docker basics to cluster management
The age of orchestration: from Docker basics to cluster managementThe age of orchestration: from Docker basics to cluster management
The age of orchestration: from Docker basics to cluster managementNicola Paolucci
 
Novalug 07142012
Novalug 07142012Novalug 07142012
Novalug 07142012Mandi Walls
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with PuppetKris Buytaert
 
Achieving Infrastructure Portability with Chef
Achieving Infrastructure Portability with ChefAchieving Infrastructure Portability with Chef
Achieving Infrastructure Portability with ChefMatt Ray
 
Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with dockerGiacomo Bagnoli
 
Above the cloud: Big Data and BI
Above the cloud: Big Data and BIAbove the cloud: Big Data and BI
Above the cloud: Big Data and BIDenny Lee
 
Python-CouchDB Training at PyCon PL 2012
Python-CouchDB Training at PyCon PL 2012Python-CouchDB Training at PyCon PL 2012
Python-CouchDB Training at PyCon PL 2012Stefan Kögl
 
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...Alexander Dean
 
Automating complex infrastructures with Puppet
Automating complex infrastructures with PuppetAutomating complex infrastructures with Puppet
Automating complex infrastructures with PuppetKris Buytaert
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
PDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoPDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoHannes Hapke
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrindermarekgoldmann
 
CouchDB Mobile - From Couch to 5K in 1 Hour
CouchDB Mobile - From Couch to 5K in 1 HourCouchDB Mobile - From Couch to 5K in 1 Hour
CouchDB Mobile - From Couch to 5K in 1 HourPeter Friese
 
Docker in Action
Docker in ActionDocker in Action
Docker in ActionAlper Kanat
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMCIcinga
 

Similar a Advanced CouchDB phpday.it (20)

Docker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudDocker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google Cloud
 
Getting started with Docker sandboxes for MariaDB
Getting started with Docker sandboxes for MariaDBGetting started with Docker sandboxes for MariaDB
Getting started with Docker sandboxes for MariaDB
 
Practical introduction to dev ops with chef
Practical introduction to dev ops with chefPractical introduction to dev ops with chef
Practical introduction to dev ops with chef
 
The age of orchestration: from Docker basics to cluster management
The age of orchestration: from Docker basics to cluster managementThe age of orchestration: from Docker basics to cluster management
The age of orchestration: from Docker basics to cluster management
 
Novalug 07142012
Novalug 07142012Novalug 07142012
Novalug 07142012
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with Puppet
 
Achieving Infrastructure Portability with Chef
Achieving Infrastructure Portability with ChefAchieving Infrastructure Portability with Chef
Achieving Infrastructure Portability with Chef
 
Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with docker
 
Above the cloud: Big Data and BI
Above the cloud: Big Data and BIAbove the cloud: Big Data and BI
Above the cloud: Big Data and BI
 
Python-CouchDB Training at PyCon PL 2012
Python-CouchDB Training at PyCon PL 2012Python-CouchDB Training at PyCon PL 2012
Python-CouchDB Training at PyCon PL 2012
 
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
 
Automating complex infrastructures with Puppet
Automating complex infrastructures with PuppetAutomating complex infrastructures with Puppet
Automating complex infrastructures with Puppet
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
PDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoPDXPortland - Dockerize Django
PDXPortland - Dockerize Django
 
CouchDB introduction
CouchDB introductionCouchDB introduction
CouchDB introduction
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinder
 
CouchDB Mobile - From Couch to 5K in 1 Hour
CouchDB Mobile - From Couch to 5K in 1 HourCouchDB Mobile - From Couch to 5K in 1 Hour
CouchDB Mobile - From Couch to 5K in 1 Hour
 
Overview of Spark for HPC
Overview of Spark for HPCOverview of Spark for HPC
Overview of Spark for HPC
 
Docker in Action
Docker in ActionDocker in Action
Docker in Action
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMC
 

Último

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
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
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
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
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
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
 

Último (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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 🐘
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
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...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
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
 

Advanced CouchDB phpday.it