CouchDB is a document-oriented database that uses JSON documents, has a RESTful HTTP API, and is queried using map/reduce views. Each of these properties alone, especially MapReduce views, may seem foreign to developers more familiar with relational databases. This tutorial will teach web developers the concepts they need to get started using CouchDB in their projects. Several CouchDB libraries are available for PHP and we will take a look at the more popular ones.
CouchDB at its Core: Global Data Storage and Rich Incremental Indexing at Clo...StampedeCon
At the StampedeCon 2013 Big Data conference in St. Louis, Adam Kocoloski, CoFounder & CTO of Cloudant, CouchDB Expert, discussed CouchDB at its Core: Global Data Storage and Rich Incremental Indexing at Cloudant - StampedeCon 2013. Cloudant operates database clusters comprising 100+ nodes based on BigCouch, the company’s fork of CouchDB. Key elements of CouchDB’s design have proven instrumental to success at this scale, including version histories, append-only storage, and multi-master replication. In this talk, Cloudant CoFounder and Apache CouchDB Committer Adam Kocoloski will discuss lessons learned from running production CouchDB clusters bigger than many wellpublicized Hadoop deployments, and how Cloudant’s experience at scale is informing development work on the next release of Apache CouchDB.
This is a presentation on CouchDB that I gave at the New York PHP User Group. I talked about the basics of CouchDB, its JSON documents, its RESTful API, writing and querying MapReduce views, using CouchDB from within PHP, and scaling.
Talk i gave at Nosqlday with Giordano Scalzo on March 25th 2011.
It's about how CouchDB can replace a full serverside mvc stack making development of simple web apps a piece of cake
Also
http://federico.galassi.net/
http://www.nosqlday.it/
http://couchdb.apache.org/
Follow me on Twitter!
https://twitter.com/federicogalassi
CouchDB has several features that help it stand out from the other databases in this rapidly growing field. Incremental map/reduce, peer to peer replication, mobile device synchronization, a realtime update feed, and the ability to host an application in the database itself (also known as a Couchapp) are just a few. See how companies such as the BBC, Radical Dynamic, Signal, and Incandescent Software are using CouchDB to solve their real world challenges.
This is a talk I presented at University Limerick to give people an introduction into CouchDB.
What is it? How does it generally work? Introducing new concepts, etc.
CouchDB at its Core: Global Data Storage and Rich Incremental Indexing at Clo...StampedeCon
At the StampedeCon 2013 Big Data conference in St. Louis, Adam Kocoloski, CoFounder & CTO of Cloudant, CouchDB Expert, discussed CouchDB at its Core: Global Data Storage and Rich Incremental Indexing at Cloudant - StampedeCon 2013. Cloudant operates database clusters comprising 100+ nodes based on BigCouch, the company’s fork of CouchDB. Key elements of CouchDB’s design have proven instrumental to success at this scale, including version histories, append-only storage, and multi-master replication. In this talk, Cloudant CoFounder and Apache CouchDB Committer Adam Kocoloski will discuss lessons learned from running production CouchDB clusters bigger than many wellpublicized Hadoop deployments, and how Cloudant’s experience at scale is informing development work on the next release of Apache CouchDB.
This is a presentation on CouchDB that I gave at the New York PHP User Group. I talked about the basics of CouchDB, its JSON documents, its RESTful API, writing and querying MapReduce views, using CouchDB from within PHP, and scaling.
Talk i gave at Nosqlday with Giordano Scalzo on March 25th 2011.
It's about how CouchDB can replace a full serverside mvc stack making development of simple web apps a piece of cake
Also
http://federico.galassi.net/
http://www.nosqlday.it/
http://couchdb.apache.org/
Follow me on Twitter!
https://twitter.com/federicogalassi
CouchDB has several features that help it stand out from the other databases in this rapidly growing field. Incremental map/reduce, peer to peer replication, mobile device synchronization, a realtime update feed, and the ability to host an application in the database itself (also known as a Couchapp) are just a few. See how companies such as the BBC, Radical Dynamic, Signal, and Incandescent Software are using CouchDB to solve their real world challenges.
This is a talk I presented at University Limerick to give people an introduction into CouchDB.
What is it? How does it generally work? Introducing new concepts, etc.
International Journal of Computational Engineering Research(IJCER)ijceronline
International Journal of Computational Engineering Research(IJCER) is an intentional online Journal in English monthly publishing journal. This Journal publish original research work that contributes significantly to further the scientific knowledge in engineering and Technology.
In this paper we describe NoSQL, a series of non-relational database
technologies and products developed to address the current problems the
RDMS system are facing: lack of true scalability, poor performance on high
data volumes and low availability. Some of these products have already been
involved in production and they perform very well: Amazon’s Dynamo,
Google’s Bigtable, Cassandra, etc. Also we provide a view on how these
systems influence the applications development in the social and semantic Web
sphere.
In this paper we describe NoSQL, a series of non-relational database technologies and products developed to address the current problems the RDMS system are facing: lack of true scalability, poor performance on high data volumes and low availability. Some of these products have already been involved in production and they perform very well: Amazon’s Dynamo, Google’s Bigtable, Cassandra, etc. Also we provide a view on how these systems influence the applications development in the social and semantic Web sphere.
EMR: A Scalable Graph-based Ranking Model for Content-based Image Retrieval1crore projects
IEEE PROJECTS 2015
1 crore projects is a leading Guide for ieee Projects and real time projects Works Provider.
It has been provided Lot of Guidance for Thousands of Students & made them more beneficial in all Technology Training.
Dot Net
DOTNET Project Domain list 2015
1. IEEE based on datamining and knowledge engineering
2. IEEE based on mobile computing
3. IEEE based on networking
4. IEEE based on Image processing
5. IEEE based on Multimedia
6. IEEE based on Network security
7. IEEE based on parallel and distributed systems
Java Project Domain list 2015
1. IEEE based on datamining and knowledge engineering
2. IEEE based on mobile computing
3. IEEE based on networking
4. IEEE based on Image processing
5. IEEE based on Multimedia
6. IEEE based on Network security
7. IEEE based on parallel and distributed systems
ECE IEEE Projects 2015
1. Matlab project
2. Ns2 project
3. Embedded project
4. Robotics project
Eligibility
Final Year students of
1. BSc (C.S)
2. BCA/B.E(C.S)
3. B.Tech IT
4. BE (C.S)
5. MSc (C.S)
6. MSc (IT)
7. MCA
8. MS (IT)
9. ME(ALL)
10. BE(ECE)(EEE)(E&I)
TECHNOLOGY USED AND FOR TRAINING IN
1. DOT NET
2. C sharp
3. ASP
4. VB
5. SQL SERVER
6. JAVA
7. J2EE
8. STRINGS
9. ORACLE
10. VB dotNET
11. EMBEDDED
12. MAT LAB
13. LAB VIEW
14. Multi Sim
CONTACT US
1 CRORE PROJECTS
Door No: 214/215,2nd Floor,
No. 172, Raahat Plaza, (Shopping Mall) ,Arcot Road, Vadapalani, Chennai,
Tamin Nadu, INDIA - 600 026
Email id: 1croreprojects@gmail.com
website:1croreprojects.com
Phone : +91 97518 00789 / +91 72999 51536
Domain-driven design is a collaborative process involving both domain experts and software practitioners that attempts to address issues of complexity in software. This process is described in the book Domain-Driven Design (Addison-Wesley 2004) written by Eric Evans. Domain-driven design starts with the assertion that (for almost all software) complexity is in the domain, not in the technology. Accordingly, we must let technology play a supporting role. Domain-driven design attempts to focus on and distill the core domain for a given project.
Philosopher and scientist Alfred Korzybski said, "The map is not the territory." As such, a person practicing domain-driven design does not attempt to model reality. Instead, domain experts and software practitioners use a mental model as a tool for solving problems within a given domain. The domain experts and software practitioners collaborate to explore and develop this model. No software of any reasonable scope has just one model. We will look at the concept of a bounded context within which each model can be isolated and explored. Within a bounded context, collaborators must speak a ubiquitous language in order to reason about and discuss the model.
We will also talk about domain-driven design's building block patterns including entities, value objects, aggregates, repositories, services, and domain events. We will look at domain-driven design practices including supple design, strategic design, and distillation of the core. We will see how test-driven development can be used as a means of exploring the model. Examples in PHP will be provided of the building block patterns as well as other techniques including closure of operations, intention revealing interfaces, side-effect free functions, and assertions.
Domain-driven design is a collaborative process involving both domain experts and software practitioners that attempts to address issues of complexity in software. This process is described in the book Domain-Driven Design written by Eric Evans. Domain-driven design starts with the assertion that complexity is in the domain, not in the technology. Accordingly, we must let technology play a supporting role.
A person practicing domain-driven design does not attempt to model reality. Instead, domain experts and software practitioners use a mental model as a tool for solving problems within a given domain. The domain experts and software practitioners collaborate to explore and develop this model. We will look at the concept of a bounded context within which models can be isolated and explored. We will talk about domain-driven design's building block patterns including entities, value objects, aggregates, repositories, services, and domain events. We will see how test-driven development can be used as a means of exploring the model.
Entity Relationships in a Document Database at CouchConf BostonBradley Holt
Unlike relational databases, document databases like CouchDB and Couchbase do not directly support entity relationships. This talk will explore patterns of modeling one-to-many and many-to-many entity relationships in a document database. These patterns include using an embedded JSON array, relating documents using identifiers, using a list of keys, and using relationship documents.
In this talk we'll see how to build CouchApps using CouchDB, Javascript, and HTML5. We'll look at related tools such as the couchapp command ine tool, the Evently jQuery plugin, the CouchDB API jQuery plugin, the CouchApp Loader, Pathbinder, and the Mustache templating framework.
Domain-driven design is a collaborative process involving both domain experts and software practitioners. This high-level overview takes a look at the driving principles behind domain-driven design. It also explores domain-driven design's building block patterns, supple design, strategic design, and distillation of the core.
jQuery Conference Boston 2011 CouchAppsBradley Holt
CouchApps are web applications built using CouchDB, JavaScript, and HTML5. CouchDB is a document-oriented database that stores JSON documents, has a RESTful HTTP API, and is queried using MapReduce views. This talk will answer your fundamental questions about CouchDB and will cover the basics of building CouchApps using jQuery and various jQuery plugins.
CouchApps are web applications built using CouchDB, JavaScript, and HTML5. CouchDB is a document-oriented database that stores JSON documents, has a RESTful HTTP API, and is queried using map/reduce views. This talk will answer your basic questions about CouchDB, but will focus on building CouchApps and related tools.
CouchDB is a document-oriented database that uses JSON documents, has a RESTful HTTP API, and is queried using map/reduce views. Each of these properties alone, especially MapReduce views, may seem foreign to developers more familiar with relational databases. This tutorial will teach web developers the concepts they need to get started using CouchDB in their projects. CouchDB’s RESTful HTTP API makes it suitable for interfacing with any programming language. CouchDB libraries are available for many programming languages and we will take a look at some of the more popular ones.
This is a presentation made at the Burlington, Vermont PHP Users Group about configuring load balancing using the Apache HTTP Server. Load balancing is a technique that can distribute work across multiple server nodes—here we will discuss load balancing HTTP (i.e. web) traffic. There are many software and hardware load balancing options available including HAProxy, Varnish, Pound, Perlbal, Squid, nginx, and Linux-HA (High-Availability Linux) on Linux Standard Base (LSB). However, many web developers are already familiar with Apache as a web server and it is relatively easy to also configure Apache as a load balancer.
Related concepts such as shared nothing architecture are discussed. We also take a look at some basic load balancing scenarios and features including sticky sessions and proxying requests based on HTTP method. Distributed load testing with Tsung is briefly discussed as well.
This is a "PHP 201" presentation that was given at the December 2010 Burlington, Vermont PHP Users group meeting. Going beyond the basics, this presentation covered working with arrays, functions, and objects.
PHP 5.3 was released in 2009 and is the newest version of PHP. Bradley Holt will talk about the new features available including namespaces, closures (lamdba/anonymous functions), and late static binding. Learn how these new features might be useful to you and why the next major version of the big PHP frameworks will require PHP 5.3.
This presentation will discuss how the Representational State Transfer (REST) architectural style can be applied to the design of your web services.
You will learn how to use HTTP methods and status codes properly and we will discuss how to use Hypermedia As The Engine Of Application State (HATEOAS). The principles of REST and HATEOAS will be demonstrated through the Atom Publishing Protocol (AtomPub) using the Google Data APIs and other AtomPub implementations as examples.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofsAlex Pruden
This paper presents Reef, a system for generating publicly verifiable succinct non-interactive zero-knowledge proofs that a committed document matches or does not match a regular expression. We describe applications such as proving the strength of passwords, the provenance of email despite redactions, the validity of oblivious DNS queries, and the existence of mutations in DNA. Reef supports the Perl Compatible Regular Expression syntax, including wildcards, alternation, ranges, capture groups, Kleene star, negations, and lookarounds. Reef introduces a new type of automata, Skipping Alternating Finite Automata (SAFA), that skips irrelevant parts of a document when producing proofs without undermining soundness, and instantiates SAFA with a lookup argument. Our experimental evaluation confirms that Reef can generate proofs for documents with 32M characters; the proofs are small and cheap to verify (under a second).
Paper: https://eprint.iacr.org/2023/1886
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
3. Problem:
The Object-Relational
Impedance Mismatch [1]
How to persist data in an object-oriented software application?
1. http://c2.com/cgi/wiki?ObjectRelationalImpedanceMismatch
2. http://martinfowler.com/eaaCatalog/repository.html
3. http://c2.com/cgi/wiki?ObjectRelationalMapping
4. Problem:
The Object-Relational
Impedance Mismatch [1]
How to persist data in an object-oriented software application?
1. http://c2.com/cgi/wiki?ObjectRelationalImpedanceMismatch
2. http://martinfowler.com/eaaCatalog/repository.html
3. http://c2.com/cgi/wiki?ObjectRelationalMapping
5. Problem:
The Object-Relational
Impedance Mismatch [1]
How to persist data in an object-oriented software application?
s eparate domain
a nd data mapping
layers[2]
1. http://c2.com/cgi/wiki?ObjectRelationalImpedanceMismatch
2. http://martinfowler.com/eaaCatalog/repository.html
3. http://c2.com/cgi/wiki?ObjectRelationalMapping
6. Problem:
The Object-Relational
Impedance Mismatch [1]
How to persist data in an object-oriented software application?
s eparate domain
a nd data mapping
layers[2]
object-relational
mapping (ORM)[3]
1. http://c2.com/cgi/wiki?ObjectRelationalImpedanceMismatch
2. http://martinfowler.com/eaaCatalog/repository.html
3. http://c2.com/cgi/wiki?ObjectRelationalMapping
7. Problem:
The Object-Relational
Impedance Mismatch [1]
How to persist data in an object-oriented software application?
s eparate domain
a nd data mapping non-relational
layers[2] database
object-relational
mapping (ORM)[3]
1. http://c2.com/cgi/wiki?ObjectRelationalImpedanceMismatch
2. http://martinfowler.com/eaaCatalog/repository.html
3. http://c2.com/cgi/wiki?ObjectRelationalMapping
8. Problem:
The Object-Relational
Impedance Mismatch [1]
How to persist data in an object-oriented software application?
s eparate domain
a nd data mapping non-relational
layers[2] database
object-relational
mapping (ORM)[3]
1. http://c2.com/cgi/wiki?ObjectRelationalImpedanceMismatch
2. http://martinfowler.com/eaaCatalog/repository.html
3. http://c2.com/cgi/wiki?ObjectRelationalMapping
12. Problem:
Semi-Structured Data
How to persist data with exible schemas?
use the
entity-attribute-
value (EAV )
leave anti-pattern[1]
non- applicable ll
column values nu
1. http://pragprog.com/book/bksqla/sql-antipatterns
13. Problem:
Semi-Structured Data
How to persist data with exible schemas?
use the
entity-attribute-
value (EAV )
leave anti-pattern[1] use a
non- applicable ll schema-less
column values nu database with a
self-describing
structure
1. http://pragprog.com/book/bksqla/sql-antipatterns
14. Problem:
Semi-Structured Data
How to persist data with exible schemas?
use the
entity-attribute-
value (EAV )
leave anti-pattern[1] use a
non- applicable ll schema-less
column values nu database with a
self-describing
structure
1. http://pragprog.com/book/bksqla/sql-antipatterns
17. Problem:
Persisting Graph
Relationships
How to persist graphs, trees and hierarchical data?
model hierarchical
data in SQL[1]
1. http://www.percona.com/webinars/2011-02-28-models-for-hierarchical-data-in-sql-and-php/
2. http://www.graph-database.org/
18. Problem:
Persisting Graph
Relationships
How to persist graphs, trees and hierarchical data?
model hierarchical
data in SQL[1] graph database[2]
1. http://www.percona.com/webinars/2011-02-28-models-for-hierarchical-data-in-sql-and-php/
2. http://www.graph-database.org/
19. Problem:
Persisting Graph
Relationships
How to persist graphs, trees and hierarchical data?
model hierarchical document
oriented d -
data in SQL[1] graph database[2] ataba se
1. http://www.percona.com/webinars/2011-02-28-models-for-hierarchical-data-in-sql-and-php/
2. http://www.graph-database.org/
20. Problem:
Persisting Graph
Relationships
How to persist graphs, trees and hierarchical data?
model hierarchical document
oriented d -
data in SQL[1] graph database[2] ataba se
1. http://www.percona.com/webinars/2011-02-28-models-for-hierarchical-data-in-sql-and-php/
2. http://www.graph-database.org/
21. Problem:
Achieving High Concurrency
How to give up consistency in exchange for high availability? [1]
1. http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
22. Problem:
Achieving High Concurrency
How to give up consistency in exchange for high availability? [1]
1. http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
23. Problem:
Achieving High Concurrency
How to give up consistency in exchange for high availability? [1]
reduce
transaction
scope
1. http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
24. Problem:
Achieving High Concurrency
How to give up consistency in exchange for high availability? [1]
reduce
transaction database
scope replication
1. http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
25. Problem:
Achieving High Concurrency
How to give up consistency in exchange for high availability? [1]
reduce
transaction database
scope replication
denormalization
1. http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
26. Problem:
Achieving High Concurrency
How to give up consistency in exchange for high availability? [1]
reduce
transaction database
scope replication
multi-version
concurrency
control (MVCC)
denormalization
1. http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
27. Problem:
Achieving High Concurrency
How to give up consistency in exchange for high availability? [1]
reduce
transaction database
scope replication
multi-version
concurrency
control (MVCC)
denormalization
1. http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
41. Schema-Less
• stores self-contained JSON documents
• related entities can be stored in a single document
• only store elds that are needed in each document
42. Futon Web Administration
• built-in web administration console
• default location is: http://localhost:5984/_utils/
• create, read, update and delete databases and documents
• query databases
• con gure CouchDB
• replicate between databases
• view task status
• run test suite
• set up server admins
• con gure database security
• run compaction and cleanup maintenance tasks
43. CouchDB Views
• queries are run against indexed views
• views are generated through incremental Map functions
• aggregate results can be retrieved through Reduce functions
44. HTTP API
• every language and platform has an HTTP client
• uses existing semantics (e.g. 201 Created, 202 Accepted)
• distributed, scalable and cacheable
45. CouchDB and PHP
• can just use an HTTP client
• several client libraries speci c to CouchDB are available
46. Flexible Querying Options
• all rows in a given view
• row(s) matching a speci ed key
• rows by start and end keys
• exact grouping
• group by levels
• limit and skip parameters
• output in descending order
• include original documents in result set
48. CouchDB or Couchbase
CouchDB:
• project of the Apache Software Foundation
• available through package managers
Couchbase:
• superset of CouchDB
• includes geospatial indexing
• available as Couchbase Mobile for iOS and Android
• commercial support options available
49. CouchDB Installation
• Mac OS X
• Homebrew
• MacPorts
• Windows
• binary installer[1]
• Ubuntu
• Aptitude
• Red Hat
• Yum
1. http://wiki.apache.org/couchdb/Windows_binary_installer
50. Couchbase Single Server[1]
Available for:
• Mac OS X
• Windows
• Ubuntu
• Red Hat
1. http://www.couchbase.com/products-and-services/couchbase-single-server
52. Installation and Startup :03
1. Install CouchDB
OR
Install Couchbase Single Server
2. If CouchDB, then at the command-line:
$ sudo couchdb
Apache CouchDB has started. Time to relax.
3. Optionally, test CouchDB:
$ curl 'http://localhost:5984/'
{"couchdb":"Welcome","version":"1.1.0"}
54. Why JSON?
• human-readable and simple data interchange format
• data structures from many programming languages can be
easily converted to and from JSON
• lightweight—doesn’t add too much to bandwidth overhead
55. JSON Data Types
• String
• Number
• Boolean (false or true)
• JSON Array (e.g. ["a", "b", "c"])
• JSON Object: collection of name/value pairs where the name
is a String and the value is any valid JSON data type
• JSON NULL (null)
56. Example JSON Object
{
"_id":"978-0-596-15589-6",
"title":"CouchDB: The De nitive Guide",
"subtitle":"Time to Relax",
"authors":[
"J. Chris Anderson",
"Jan Lehnardt",
"Noah Slater"
],
"publisher":"O'Reilly Media",
"released":"2010-01-19",
"pages":272
}
58. Access Futon :01
1. Visit Futon in your web browser:
http://localhost:5984/_utils/
2. Note the existing _replicator and _users databases
3. Note the Tools navigation section
4. Note the following message:
“Welcome to Admin Party!”
62. Create a Document :05
1. Click New Document
2. Enter “978-0-596-15589-6” as the value for the _id eld, and
then click apply
3. Using the Add Field button, add a “title” eld with a value of
“CouchDB: The De nitive Guide”
4. Add a “subtitle” eld with a value of “Time to Relax”
5. Add an “authors” eld with a value of:
["J. Chris Anderson", "Jan Lehnardt", "Noah Slater"]
6. Add a “publisher” eld with a value of “O'Reilly Media”
7. Add a “released” eld with a value of “2010-01-19”
8. Add a “pages” eld with a value of “272”
9. Click Save Document
65. Map Functions
• used to transform documents into key/value pairs
• user-de ned, typically written in JavaScript
• every document is incrementally passed through this function
• function is passed a JSON object representing a document
• function calls an emit function zero, one or more times
• emit function accepts two arguments:
• a key
• a value to be associated with the key
• an id eld is implicitly emitted as well
66. Temporary Views
• contains a Map function and an optional Reduce function
• useful in development
• very slow on large data sets
68. Map Book Titles :03
1. Click on the books database in the breadcrumb navigation
2. Select Temporary view… from the View select menu
3. Enter the following in the View Code text area:
function(doc) {
if (doc.title) {
emit(doc.title);
}
}
4. Click Run
70. Map functions must be deterministic.
Given the same input, a Map function
must always return the same output.
71. Add a Second Document :05
1. Click New Document
2. Enter “978-0-596-52926-0” as the value for the _id eld, and
then click apply
3. Add a “title” eld with a value of “RESTful Web Services”
4. Add a “subtitle” eld with a value of “Web services for the real
world”
5. Add an “authors” eld with a value of:
["Leonard Richardson", "Sam Ruby"]
6. Add a “publisher” eld with a value of “O'Reilly Media”
7. Add a “released” eld with a value of “2007-05-08”
8. Add a “pages” eld with a value of “448”
9. Click Save Document
73. Map Book Titles :01
1. Click on the books database in the breadcrumb navigation
2. If not already selected, select Temporary view… from the View
select menu
3. If not already entered, enter the following in the View Code
text area:
function(doc) {
if (doc.title) {
emit(doc.title);
}
}
4. Click Run
76. Add a formats Field :03
1. Navigate to the books database, if not already there
2. Select All documents from the View select menu
3. Click the rst document, 978-0-596-15589-6
4. Add a “formats” eld with a value of:
["Print", "Ebook", "Safari Books Online"]
5. Click Save Document
6. Navigate back to the books database
7. Repeat steps 3 through 6 for the second document,
978-0-596-52926-0
77. When updating documents, you may
have noticed the _rev eld, an artifact
of CouchDB’s Multi-Version Concurrency
Control (MVCC).
78. Add a Third Document :05
1. Click New Document
2. Enter “978-1-565-92580-9” as the value for the _id eld, and then
click apply
3. Add a “title” eld with a value of “DocBook: The De nitive Guide”
4. Add an “authors” eld with a value of:
["Norman Walsh", "Leonard Muellner"]
5. Add a “publisher” eld with a value of “O'Reilly Media”
6. Add a “formats” eld with a value of:
["Print"]
7. Add a “released” eld with a value of “1999-10-28”
8. Add a “pages” eld with a value of “648”
9. Click Save Document
80. Map Book Formats :03
1. Navigate to the books database
2. Select Temporary view… from the View select menu
3. Enter the following in the View Code text area:
function(doc) {
if (doc.formats) {
for (var i in doc.formats) {
emit(doc.formats[i]);
}
}
}
4. Click Run
82. Map Book Authors :02
1. Navigate to the books database
2. Select Temporary view… from the View select menu
3. Enter the following in the View Code text area:
function(doc) {
if (doc.authors) {
for (var i in doc.authors) {
emit(doc.authors[i]);
}
}
}
4. Click Run
85. Reduce Functions
• optional, run against data set produced by a Map function
• typically used to reduce a set of values to a single, scalar value
• can reference built-in Reduce functions
• custom Reduce functions can be written in JavaScript
• set of already reduced data may be rereduced
• function is passed three arguments:
• keys: array of mapped keys and associated document
identi ers in the form of [key, id]
• values: array of mapped values
• rereduce: boolean value indicating whether or not the
reduce function is being called recursively on its own
output (in which case, keys will be null)
86. Built-In Reduce Functions
• written in CouchDB’s native Erlang
• faster than user-de ned JavaScript functions
• includes:
• _count
• _sum
• _stats
87. If you think that you need to write
your own custom Reduce function,
you’re probably doing it wrong.
88. Grouping
• values can be reduced by group
• grouping is controlled by a query, not by the Reduce function
• grouping is done by key
• key levels, or parts of a key, can also be grouped on
90. The built-in _count function can reduce
arbitrary values, including null values.
91. Count: No Grouping :03
1. Select Temporary view… from the View select menu
2. Enter the following in the View Code text area:
function(doc) {
if (doc.formats) {
for (var i in doc.formats) {
emit(doc.formats[i]);
}
}
}
3. Enter the following in the Reduce Function text area:
_count
4. Click Run
5. Check the Reduce checkbox
6. Select none from the Grouping select menu
95. The _sum and _stats functions
will only reduce sets of numbers.
96. Sum: Exact Grouping :02
1. Update the View Code text area with the following:
function(doc) {
if (doc.formats) {
for (var i in doc.formats) {
emit(doc.formats[i], doc.pages);
}
}
}
2. Enter the following in the Reduce Function text area:
_sum
3. Click Run
4. The Reduce checkbox should be checked
5. exact should be selected from the Grouping select menu
98. Stats: Exact Grouping :01
1. Enter the following in the Reduce Function text area:
_stats
2. Click Run
3. The Reduce checkbox should be checked
4. exact should be selected from the Grouping select menu
100. Map/Reduce gives you tremendous
exibility, but has its limitations:
no ad-hoc queries*
index is one dimensional
only key or range queries are allowed†
*Temporary views are only useful in development, not in production.
†Multiple key queries are allowed, but result in multiple hits on the index.
102. Non-Temporary Views
• multiple views can be de ned within a design document
• a view contains a Map and an optional Reduce function
• a view is recomputed when its design document is updated
• views are incrementally re-indexed after documents are
created, updated or deleted*
*Technically, views are incrementally re-indexed when queried.
103. Contents of a
Design Document
• view de nitions
• Map functions
• Reduce functions
• show functions
• list functions
• document update handlers
• document update validation functions
• rewrite de nitions
• arbitrary elds
• arbitrary attachments
105. Titles View :05
1. Update the View Code text area with the following:
function(doc) {
if (doc.title) {
emit(doc.title, doc.pages);
}
}
2. Enter the following in the Reduce Function text area:
_stats
3. Click Save As…
4. Enter “default” as the Design Document name
5. Enter “titles” as the View Name
6. Click Save
107. Query Titles View :01
1. Select titles from the View select menu, if not already selected
2. Click arrow next to View Code, if you’d like
3. Check the Reduce checkbox, if not already checked
4. Select none from the Grouping select menu
109. Formats View :05
1. Update the View Code text area with the following:
function(doc) {
if (doc.formats) {
for (var i in doc.formats) {
emit(doc.formats[i], doc.pages);
}
}
}
2. Enter the following in the Reduce Function text area:
_stats
3. Click Save As…
4. Enter “default” as the Design Document name
5. Enter “formats” as the View Name
6. Click Save
111. Query Formats View :01
1. Select formats from the View select menu, if not
already selected
2. Click the arrow next to View Code, if you’d like
3. Check the Reduce checkbox, if not already checked
4. Select none from the Grouping select menu
113. Authors View :05
1. Update the View Code text area with the following:
function(doc) {
if (doc.authors) {
for (var i in doc.authors) {
emit(doc.authors[i], doc.pages);
}
}
}
2. Enter the following in the Reduce Function text area:
_stats
3. Click Save As…
4. Enter “default” as the Design Document name
5. Enter “authors” as the View Name
6. Click Save
115. Query Authors View :01
1. Select authors from the View select menu, if not already
selected
2. Click arrow next to View Code, if you’d like
3. Check the Reduce checkbox, if not already checked
4. Select none from the Grouping select menu
119. Resources
• URI identi es a resource
• resource could be a:
• database
http://localhost:5984/books
• document
http://localhost:5984/books/978-0-596-15589-6
• attachment
http://localhost:5984/books/978-0-596-15589-6/cover.gif
• con guration section
http://localhost:5984/_config/uuids
120. Methods
• HTTP methods de ne actions on resources
• HTTP methods used in CouchDB include:
• GET
• POST
• PUT
• DELETE
121. Self-Describing Messages
• HTTP request headers:
• Accept
• Content-Type
• HTTP response status codes:
• 200 OK
• 201 Created
• 409 Con ict
• HTTP response headers:
• Content-Type
• Etag
122. Conditional caching can be done with
the Etag HTTP response header and the
If-None-Match HTTP request header.
123. Hypermedia Controls
• not part of the core API*
• can be created with a combination of:
• show functions
• list functions
• document update handlers
*One might argue that a document identi er could serve as a form of hypermedia control.
124. cURL [1]
• tool for transferring data
• understands many protocols, including HTTP
• both a library and a command-line tool
1. http://curl.haxx.se/
125. Useful cURL Switches
• -d HTTP POST data
• --data-urlencode HTTP POST data url encoded
• -G Send the -d data with a HTTP GET
• -H Custom header to pass to server
• -i Include protocol headers in the output
• -X Specify request command to use
127. Install cURL
1. Install cURL command-line tool using your package manager
OR
Download and install cURL executable[1]
2. Test cURL and CouchDB:
$ curl -iX GET 'http://localhost:5984/'
1. http://curl.haxx.se/dlwiz/?type=bin
128. Install cURL
1. Install cURL command-line tool using your package manager
OR
Download and install cURL executable[1]
2. Test cURL and CouchDB:
$ curl -iX GET 'http://localhost:5984/'
HTTP/1.1 200 OK
Server: CouchDB/1.1.0 (Erlang OTP/R14B03)
Date: Tue, 11 Oct 2011 16:21:40 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 40
Cache-Control: must-revalidate
{"couchdb":"Welcome","version":"1.1.0"}
1. http://curl.haxx.se/dlwiz/?type=bin
129. Accept JSON
1. Tell CouchDB that you can accept JSON:
$ curl -iX GET 'http://localhost:5984/'
-H 'Accept: application/json'
130. Accept JSON
1. Tell CouchDB that you can accept JSON:
$ curl -iX GET 'http://localhost:5984/'
-H 'Accept: application/json'
HTTP/1.1 200 OK
Server: CouchDB/1.1.0 (Erlang OTP/R14B03)
Date: Tue, 11 Oct 2011 16:51:40 GMT
Content-Type: application/json
Content-Length: 40
Cache-Control: must-revalidate
{"couchdb":"Welcome","version":"1.1.0"}
131. Create a Database
1. PUT a new database into CouchDB:
$ curl -iX PUT 'http://localhost:5984/mydb'
132. Create a Database
1. PUT a new database into CouchDB:
$ curl -iX PUT 'http://localhost:5984/mydb'
HTTP/1.1 201 Created
Location: http://localhost:5984/mydb
{"ok":true}
133. Create a Document
1. POST a new document into a CouchDB database:
$ curl -iX POST 'http://localhost:5984/mydb'
-H 'Content-Type: application/json'
-d '{"_id":"mydoc"}'
134. Create a Document
1. POST a new document into a CouchDB database:
$ curl -iX POST 'http://localhost:5984/mydb'
-H 'Content-Type: application/json'
-d '{"_id":"mydoc"}'
HTTP/1.1 201 Created
Location: http://localhost:5984/mydb/mydoc
{
"ok":true,
"id":"mydoc",
"rev":"1-967a00dff5e02add41819138abb3284d"
}
135. Read the Document
1. GET a document:
$ curl -iX GET 'http://localhost:5984/mydb/mydoc'
136. Read the Document
1. GET a document:
$ curl -iX GET 'http://localhost:5984/mydb/mydoc'
HTTP/1.1 200 OK
Etag: "1-967a00dff5e02add41819138abb3284d"
{
"_id":"mydoc",
"_rev":"1-967a00dff5e02add41819138abb3284d"
}
137. Update the Document
1. PUT an updated document:
$ curl -iX PUT 'http://localhost:5984/mydb/mydoc'
-H 'If-Match: "1-967a00dff5e02add41819138abb3284d"'
-H 'Content-Type: application/json'
-d '{"title":"Learning CouchDB"}'
138. Update the Document
1. PUT an updated document:
$ curl -iX PUT 'http://localhost:5984/mydb/mydoc'
-H 'If-Match: "1-967a00dff5e02add41819138abb3284d"'
-H 'Content-Type: application/json'
-d '{"title":"Learning CouchDB"}'
HTTP/1.1 201 Created
Location: http://localhost:5984/mydb/mydoc
Etag: "2-516027e3179a22a22e06874c374e8ef0"
{
"ok":true,
"id":"mydoc",
"rev":"2-516027e3179a22a22e06874c374e8ef0"
}
139. Read the Document
1. GET the document again:
$ curl -iX GET 'http://localhost:5984/mydb/mydoc'
140. Read the Document
1. GET the document again:
$ curl -iX GET 'http://localhost:5984/mydb/mydoc'
HTTP/1.1 200 OK
Etag: "2-516027e3179a22a22e06874c374e8ef0"
{
"_id":"mydoc",
"_rev":"2-516027e3179a22a22e06874c374e8ef0",
"title":"Learning CouchDB"
}
141. Delete the Document
1. DELETE the document:
$ curl -iX DELETE 'http://localhost:5984/mydb/mydoc'
-H 'If-Match: "2-516027e3179a22a22e06874c374e8ef0"'
142. Delete the Document
1. DELETE the document:
$ curl -iX DELETE 'http://localhost:5984/mydb/mydoc'
-H 'If-Match: "2-516027e3179a22a22e06874c374e8ef0"'
HTTP/1.1 200 OK
Etag: "3-e9a5aa1c486eee23c84fa028bc904991"
{
"ok":true,
"id":"mydoc",
"rev":"3-e9a5aa1c486eee23c84fa028bc904991"
}
143. Delete the Database
1. DELETE the database:
$ curl -iX DELETE 'http://localhost:5984/mydb'
144. Delete the Database
1. DELETE the database:
$ curl -iX DELETE 'http://localhost:5984/mydb'
HTTP/1.1 200 OK
{"ok":true}
146. HTTP Clients
• Zend_Http_Client[1]
• a Zend Framework component
• relatively easy-to-use API
• PHP’s cURL extension[2]
• commonly installed extension
• less intuitive API
• HTTP_Request2[3]
• a PEAR component
1. http://framework.zend.com/manual/en/zend.http.html
2. http://php.net/manual/en/book.curl.php
3. http://pear.php.net/package/HTTP_Request2
147. Sag for CouchDB[1]
• accepts PHP data structures (e.g. objects, strings)
• can return raw JSON
• can return a PHP object
1. http://www.saggingcouch.com/
148. PHP Object_Freezer[1]
• created and maintained by Sebastian Bergmann
• “freezes” and “thaws” PHP objects
• extensible storage options
• includes CouchDB object storage
• installable through pear:
$ pear channel-discover pear.phpunit.de
$ pear install phpunit/Object_Freezer
1. https://github.com/sebastianbergmann/php-object-freezer
149. PHP CouchDB Extension[1]
• supports a large part of the CouchDB API
• supports both cookie and basic authentication
• automatically encodes and decodes JSON to and from PHP
objects and arrays
• available as a PECL extension
1. http://www.topdog.za.net/php_couchdb_extension
150. Doctrine2 CouchDB ODM[1]
• a mapper between PHP objects and CouchDB documents
• uses metadata mapping pattern to map documents to plain
old PHP objects
• potentially good t if you’re already using Doctrine
1. https://github.com/doctrine/couchdb-odm
151. Others
• PHP On Couch[1]
• Chill[2]
• Settee[3]
• PHPillow[4]*
1. https://github.com/dready92/PHP-on-Couch
2. https://github.com/dancryer/Chill
3. https://github.com/inadarei/settee
4. http://arbitracker.org/phpillow.html
*PHPillow does not appear to be maintained.
153. To Reduce or Not To Reduce
• results will not be reduced if no Reduce function is de ned
• by default, results will be reduced
• to not reduce, set the reduce parameter to false
154. Key Matching
• by default, all rows will be returned
• results can be ltered with a key parameter
• the key parameter can be set to any valid JSON value
• valid JSON values include a:
• String
• Number
• Boolean
• JSON Array
• JSON Object
• must be URL encoded in a query string
• zero, one ore more rows matching the key will be returned
155. Start and End Key Range
• startkey parameter can de ne the beginning of a range
• endkey parameter can de ne the end of a range
• startkey and endkey parameters can be any valid JSON value
• startkey and endkey parameters must be URL encoded
• startkey_docid parameter further re nes the start of a range
• endkey_docid parameter further re nes the end of a range
• since they reference document identi ers, the startkey_docid
and endkey_docid parameters must be strings
156. Limiting, Skipping
and Reversing
• limit parameter speci es a maximum number of rows
• skip parameter speci es a number of rows to skip over
• to reverse results, set the descending parameter to true
• when reversing results, swap your startkey/startkey_docid
parameters with your endkey/endkey_docid parameters
157. Grouping
• to group results by exact key, set the group parameter to true
• group_level parameter is useful if view’s keys are JSON Arrays,
otherwise known as compound keys
• a group_level of 1 will only group on the rst items in the
arrays, ignoring any subsequent array elements
• a group_level of 2 will only group on the rst and second
items in the arrays, ignoring any subsequent array elements
• a group_level of 3 will only group on the rst, second and
third items in the arrays, ignoring any subsequent array
elements
•…
158. Including Documents
• original document from which each row was emitted can be
included by setting the include_docs parameter to true
• this will add a doc eld to your output rows
• if the value emitted from the Map function is a JSON Object
containing an _id eld, then CouchDB will instead include the
document with an identi er matching the value of this eld
159. Stale Views
• by default, views are incrementally updated when queried
• set the stale parameter’s value to ok to avoid a view update
• if any documents have been created, updated or deleted then
this will return results faster
• however, it will return possibly outdated results
• set the stale parameter’s value to update_after to get stale
results, but trigger a view update after results are returned
162. Install Zend Framework :02
1. If not already in your include path, install Zend Framework:
$ pear channel-discover pear.zfcampus.org
$ pear install zfcampus/zf
185. Reversing Results
id key value
"978-0-596-52926-0" "RESTful Web Services" 448
"978-1-565-92580-9" "DocBook: The Definitive Guide" 648
"978-0-596-15589-6" "CouchDB: The Definitive Guide" 272
189. What We’re Doing Next
• adding a fourth book document with a released date of
2010-01-08
• this is the same year and month as another book’s released
date
• creating a new releases view that indexes books by their
released dates
• releases view will use a compound key—a three-level JSON
Array of year, month and day
190. Add a Fourth Document :05
$book = array(
'_id' => '978-0-596-80579-1',
'title' => 'Building iPhone Apps with HTML, CSS, and JavaScript',
'subtitle' => 'Making App Store Apps Without Objective-C or Cocoa',
'authors' => array('Jonathan Stark'),
'publisher'=> 'O'Reilly Media',
'formats' => array('Print', 'Ebook', 'Safari Books Online'),
'released' => '2010-01-08',
'pages' => 192
);
$client = new Zend_Http_Client();
$client->setUri('http://127.0.0.1:5984/books');
$client->setHeaders('Content-Type', 'application/json');
$client->setRawData(Zend_Json::encode($book));
$response = $client->request(Zend_Http_Client::POST);
print_r($response->getStatus()); // 201
191. Releases View :05
1. In the books database in Futon, select Temporary view… from the
View select menu
2. Enter the following into the View Code text area:
function(doc) {
if (doc.released) {
emit(doc.released.split("-"), doc.pages);
}
}
3. Enter the following in the Reduce Function text area:
_stats
4. Click Save As…
5. Enter “default” as the Design Document name
6. Enter “releases” as the View Name
7. Click Save
202. Multi-Master Replication
• peer-based and bi-directional
• no explicit cluster setup required
• synchronization is incremental
• changes feed allows for replication to other systems
204. Horizontally Scalable
• shared nothing architecture
• non-blocking reads and writes for high concurrency
• fault tolerant, isolated messages
205. ACID Compliant
Atomicity: individual document updates are “all or nothing”
Consistency: queries will be “point in time” consistent
Isolation: updates isolated to document revision number
Durability: success code is returned only after data is on disk
206. Authentication
• special _users database
• basic access authentication
• cookie authentication
• OAuth support
207. Security Model
• server admins
• database admins
• database readers
• document-level authorization with validation functions
208. Web Server
• static les as attachments (e.g. HTML, Javascript, CSS)
• URL rewriting
• HTTP proxying
• HTTP range requests
• SSL support
• virtual hosts
212. Extensible
• GeoCouch[1] for geospatial indexing
• couchdb-lucene[2] for full text indexing
• ElasticSearch[3] for full text indexing
1. https://github.com/couchbase/geocouch
2. https://github.com/rnewson/couchdb-lucene
3. http://www.elasticsearch.org/tutorials/2010/08/01/couchb-integration.html
214. Hosting
Iris Couch
• Free (for now)
• Couchbase server
• GeoCouch geospatial indexing
• http://www.iriscouch.com
Cloudant
• Various pricing levels
• Full-text searching
• Ad-hoc queries
• Elastic scaling, clustering and sharding using BigCouch
• https://cloudant.com
215. Documentation and Books
CouchDB Wiki Scaling CouchDB
http://wiki.apache.org/couchdb/ by Bradley Holt (O’Reilly)
978-1-4493-0343-3
CouchDB: The De nitive Guide
by J. Chris Anderson, Jan Getting Started with CouchDB
Lehnardt and Noah Slater by MC Brown (O’Reilly)
(O’Reilly) 978-1-4493-0755-4
978-0-596-15589-6
Beginning CouchDB
Writing and Querying MapReduce by Joe Lennon (Apress)
Views in CouchDB 978-1-430-27237-3
by Bradley Holt (O’Reilly)
978-1-449-30312-9