SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Downloaden Sie, um offline zu lesen
.
    Distributed computation on dynamo-style
          distributed storage: Riak pipe
.             An introduction to Riak


                   Jaseem Abid


                September 19, 2012




                                          .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                     ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak




              .    .    .      . . . . . . . . . . . .               .    .        .    .    .
         ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. What is Riak ?




    Riak is an open source, distributed NoSQL database implementing
    the principles from Amazon’s Dynamo paper.




                                                   .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                              ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Dynamo Model

   Riak is a highly available, proprietary key-value structured storage
   system or a distributed data store. It has properties of both
   databases and distributed hash tables (DHTs). It is not directly
   exposed as a web service, but is used to power parts of other
   Amazon Web Services such as Amazon S3.




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Dynamo Model

   Riak is a highly available, proprietary key-value structured storage
   system or a distributed data store. It has properties of both
   databases and distributed hash tables (DHTs). It is not directly
   exposed as a web service, but is used to power parts of other
   Amazon Web Services such as Amazon S3.




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Dynamo Model

   Riak is a highly available, proprietary key-value structured storage
   system or a distributed data store. It has properties of both
   databases and distributed hash tables (DHTs). It is not directly
   exposed as a web service, but is used to power parts of other
   Amazon Web Services such as Amazon S3.




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Dynamo Model

   Riak is a highly available, proprietary key-value structured storage
   system or a distributed data store. It has properties of both
   databases and distributed hash tables (DHTs). It is not directly
   exposed as a web service, but is used to power parts of other
   Amazon Web Services such as Amazon S3.




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Dynamo Model

   Riak is a highly available, proprietary key-value structured storage
   system or a distributed data store. It has properties of both
   databases and distributed hash tables (DHTs). It is not directly
   exposed as a web service, but is used to power parts of other
   Amazon Web Services such as Amazon S3.


   Implementations
       Apache Cassandra
       Project Voldemort
       Riak
       Amazon DynamoDB

                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. This talk



    Front Matter
        Dynamo (and NoSQL) are nothing new
        Much of Dynamo was invented > 10 years ago
        Dynamo chooses AP of CAP
        This talk will focus on properties of Dynamo-inspired systems
        (Riak, Cassandra, Voldemort)




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. CAP theorem




                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. CAP theorem



       Consistent, writes are atomic and all subsequent requests
       retrieve the new value




                                                   .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                              ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. CAP theorem



       Consistent, writes are atomic and all subsequent requests
       retrieve the new value
       Available, the database will always return a value as long as a
       single server is running




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. CAP theorem



       Consistent, writes are atomic and all subsequent requests
       retrieve the new value
       Available, the database will always return a value as long as a
       single server is running
       Partition Tolerant, the system will still function even if server
       communication is temporarily lost—that is, a network
       partition




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. CAP theorem



       Consistent, writes are atomic and all subsequent requests
       retrieve the new value
       Available, the database will always return a value as long as a
       single server is running
       Partition Tolerant, the system will still function even if server
       communication is temporarily lost—that is, a network
       partition
       You can have only two at once.




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. CAP theorem




   Riak picks AP of CAP




                               .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                          ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Eventual Consistency



        Distributed databases must be partition tolerant, so the
        choice between availability and consistency can be difficult.
        The real world is eventually consistent and works (mostly) fine
        *Eventual* doesn’t mean minutes, days, or even seconds in
        non-failure cases
        DNS, HTTP with Expires: header
        How you model the real world matters!




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak Architecture
    Amazon’s Dynamo architecture
    Distributed, Scalable, No single point of failure
    No transactions; trade strong consistency for eventual consistency




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Simple Key Value data store - Store anything




    Plain text, JSON, or XML to images or video clips—all accessible
    through a simple HTTP interface




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Simple Key Value data store - Store anything




    Plain text, JSON, or XML to images or video clips—all accessible
    through a simple HTTP interface
    Riak KV




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Fault-Tolerant




    Riak is also fault-tolerant. Servers can go up or down at any
    moment with no single point of failure.




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak loves the web




    Query Riak via URLs, headers, and verbs, and Riak returns assets
    and standard HTTP response codes.




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Scalable


      # start 4 nodes

      $   dev/dev1/bin/riak   start
      $   dev/dev2/bin/riak   start
      $   dev/dev3/bin/riak   start
      $   dev/dev4/bin/riak   start

      # scale out
      $ dev/dev2/bin/riak-admin join dev1@127.0.0.1

      # scabe back in
      $ riak-admin leave


                                            .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                       ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Queriablity


    REST API
    Easy quick and dirty
    Map Reduce
    Provide set of starting keys, filter via map
    Map reduce is meant for calulations/ aggregations and not queries.
    Riak Search
    Full text search in Riak
    Opinionated
    Roll out your own indices
    Difficult to get it right
    More code to maintain
    Often introduces SPOFs


                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak REST API




    Representational state transfer




                                           .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                      ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak REST API




    Representational state transfer
    Create Update Read Delete verbs




                                           .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                      ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak REST API




    Representational state transfer
    Create Update Read Delete verbs
    Riak and cURL




                                           .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                      ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. REST API w/ curl

    $ curl http://localhost:8091/ping
    OK

    # Let’s issue a bad query.
    # -I tells cURL that we want only the header response.

    $ curl -I http://localhost:8091/riak/no_bucket/no_key
    HTTP/1.1 404 Object Not Found
    Server: MochiWeb/1.1 WebMachine/1.7.3 
     (participate in the frantic)
    Date: Thu, 04 Aug 2011 01:25:49 GMT
    Content-Type: text/plain
    Content-Length: 10


                                             .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                        ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Lets PUT something in the DB



    $ curl -v -X PUT http://localhost:8091/riak/favs/db 
    -H "Content-Type: text/html" 
    -d "<html>
          <body>
            <h1>
               My new favorite DB is RIAK
            </h1>
          </body>
       </html>"




                                            .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                       ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Now get it back




    curl -X GET http://localhost:8091/riak/favs/db


    Or just hit the browser




                                            .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                       ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Or POST it

    $ curl -I -X POST http://localhost:8091/riak/animals 
    -H "Content-Type: application/json" 
    -d '{
          "nickname" : "Sergeant Stubby",
          "breed" : "Terrier"
        }'

    HTTP/1.1 201 Created
    Vary: Accept-Encoding
    Server: MochiWeb/1.1 WebMachine/1.7.3 
    (participate in the frantic)
    Location: /riak/animals/6VZc2o7zKxq2B34kJrm1S0ma3PO
    Date: Tue, 05 Apr 2011 07:45:33 GMT
    Content-Type: application/json
    Content-Length: 0
                                             .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                        ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Dump anything
     curl -X PUT HTTP://127.0.0.1:8091/riak/images/1.jpg 
     -H "Content-type: image/jpeg" 
     --data-binary @image_name.jpg




                                            .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                       ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Or DELETE it


    $ curl -I -X DELETE http://localhost:8091/riak/ 
          animals/6VZc2o7zKxq2B34kJrm1S0ma3PO

    HTTP/1.1 204 No Content
    Vary: Accept-Encoding
    Server: MochiWeb/1.1 WebMachine/1.7.3 
     (participate in the frantic)
    Date: Mon, 11 Apr 2011 05:08:39 GMT
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 0

    DELETE won’t return any body, but the HTTP code will be 204 if
    successful. Otherwise, as you’d expect, it returns a 404.

                                                  .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                             ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Map Reduce




   Google :)
   *large* data sets
   Functional Programming
   Apache Hadoop
   Why C suck here




                                 .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                            ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. The tldr; version


    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).
    MapReduce can take advantage of locality of data, processing data
    on or near the storage assets to decrease transmission of data.




                                                        .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                   ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Map




   ”Map” step: The master node takes the input, divides it into
   smaller sub-problems, and distributes them to worker nodes. A
   worker node may do this again in turn, leading to a multi-level tree
   structure. The worker node processes the smaller problem, and
   passes the answer back to its master node.




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Reduce




    ”Reduce” step: The master node then collects the answers to all
    the sub-problems and combines them in some way to form the
    output – the answer to the problem it was originally trying to solve.




                                                       .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                  ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. JSON
   {
         "name": "John Smith",
         "age": 25,
         "address": {
             "streetAddress": "21 2nd Street",
             "city": "New York"
             "postalCode": "10021"
         },
         "phoneNumber": [
             {
                 "type": "home",
                 "number": "212 555-1234"
             },
             {
                 "type": "fax",
                 "number": "646 555-4567"
             }
         ]
   }                                        ..
                                                 .
                                                 ..
                                                      .
                                                      ..
                                                           .      . . . . . . . . . . . .
                                                               .. .. .. .. .. .. .. .. .. .. .. .. ..
                                                                                                        .
                                                                                                        ..
                                                                                                             .
                                                                                                                 ..
                                                                                                                      .
                                                                                                                      ..
                                                                                                                           .
                                                                                                                           ..
                                                                                                                                .
. Map


   The Riak way

   function (v) {
       return [v.phoneNumber];
   }

   The couchDB way

   function (v) {
       emit("phone", v.phoneNumber);
   }



                                            .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                       ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak Search




    ...




                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak Secondary Indices




    ...




                                .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                           ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Written in : Erlang & C, some Javascript




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Protocol: HTTP/REST or custom binary




                                                .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                           ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Tunable trade-offs for distribution and replication (N, R, W)




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Pre - and post-commit hooks in JavaScript or Erlang, for
    validation and security.




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Map/reduce in JavaScript or Erlang




                                              .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                         ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Links & link walking: use it as a graph database




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Secondary indices: but only one at once Large object support
    (Luwak)




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Comes in ”open source” and ”enterprise” editions




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Full-text search, indexing, querying with Riak …Search server (beta)




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    In the process of migrating the storing backend from ”Bitcask” to
    Google ”LevelDB”




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Masterless multi-site replication replication and SNMP monitoring
    are commercially licensed




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    Best used: If you want something Cassandra-like (Dynamo-like),
    but no way you’re gonna deal with the bloat and complexity. If you
    need very good single-site scalability, availability and
    fault-tolerance, but you’re ready to pay for multi-site replication.




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Riak …




    For example: Point-of-sales data collection. Factory control
    systems. Places where even seconds of downtime hurt. Could be
    used as a well-update-able web server.




                                                   .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                              ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Review



       Multi-node Clustering
       MapReduce Processing
       Integrated Full-Text Search
       Secondary Indexing
       Masterless Multi-Site Replication
       Large Object Support
       Implementation
       Architecture




                                                .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                           ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    Scalable
    Riak is built so you can add more capacity as your app or platform
    grows. When you add new machines, Riak distributes data
    automatically around the cluster with no downtime and a
    near-linear increase in performance and throughput




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    Simple Ops
    Riak is the most boring database you’ll ever run in production. No
    sharding required, just horizontal scaling and straight-forward
    capacity planning. The same operational tasks apply to small
    clusters and large clusters. More machines does not mean more
    ops.




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    Masterless
    A Riak cluster is masterless. No node is special and any node can
    handle requests for any other node in the cluster. All requests to
    Riak happen concurrently and developers don’t have to spend time
    worrying about read/write locks or single points of failure.




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    Fault Tolerant
    Decide how many replicas of the data you want (start at 3). If
    nodes go down, requests are routed transparently to other nodes.
    Riak uses proven architectural principles like hinted handoff and
    read repair so you can always write and read data, even in failure
    conditions.




                                                      .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                 ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    Complex Queries
    In addition to key/value access to your data, Riak has built-in
    support for MapReduce, Full Text Search, and Secondary Indexes,
    giving developers various ways to store and query their data.




                                                   .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                              ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    Flexible APIs
    Riak is equipped with fully-featured HTTP and Protocol Buffers
    APIs, with support for both of these transports in all of our
    supported client libraries. You can also write your own client layer
    to wrap our APIs if your use case or preference calls for it.




                                                       .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                  ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    1000s of Users
    Comcast, Yammer, Voxer, Boeing, BestBuy, SEOMoz, Joyent,
    Kiip, DotCloud, Formspring, GitHub, and the Danish Government
    are just a few of the thousands of startups and enterprises that
    have deployed Riak.




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Who uses it and why?



       github   git.io
     comcast    Internal object storage
     yammer     Notifications
     DISQUS     analytics
         AOL    1.5 billion data objects per day
      Mozilla   User reviews


    joyent, best buy …




                                                        .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                   ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    Language Support
    Basho and the Riak Community maintain libraries for most major
    languages including Java, Node.js, Python, Ruby, PHP, C/C++,
    and many more. All the client code, like the core Riak code, is
    available on GitHub.




                                                    .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                               ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
. Why use Riak




    Powerful Community
    The Riak community is composed of smart, passionate hackers
    who are contributing code, support, and evangelism every day.
    There are hundreds of companies and individuals testing, breaking,
    running, and building Riak.




                                                     .    .    .      . . . . . . . . . . . .               .    .        .    .    .
                                                ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..
Questions?




                  .    .    .      . . . . . . . . . . . .               .    .        .    .    .
             ..   ..   ..       .. .. .. .. .. .. .. .. .. .. .. .. ..   ..       ..   ..   ..

Weitere ähnliche Inhalte

Was ist angesagt?

Pragmatic.bookshelf.pragmatic.ajax.a.web.2.0.primer.apr.2006
Pragmatic.bookshelf.pragmatic.ajax.a.web.2.0.primer.apr.2006Pragmatic.bookshelf.pragmatic.ajax.a.web.2.0.primer.apr.2006
Pragmatic.bookshelf.pragmatic.ajax.a.web.2.0.primer.apr.2006ngotuananh
 
Lesson in electric circuits v3
Lesson in electric circuits v3Lesson in electric circuits v3
Lesson in electric circuits v3ayalewtfr
 
Metatron Technology Consulting 's MySQL to PostgreSQL ...
Metatron Technology Consulting 's MySQL to PostgreSQL ...Metatron Technology Consulting 's MySQL to PostgreSQL ...
Metatron Technology Consulting 's MySQL to PostgreSQL ...webhostingguy
 
Apache Cassandra Multi-Datacenter Essentials (Julien Anguenot, iLand Internet...
Apache Cassandra Multi-Datacenter Essentials (Julien Anguenot, iLand Internet...Apache Cassandra Multi-Datacenter Essentials (Julien Anguenot, iLand Internet...
Apache Cassandra Multi-Datacenter Essentials (Julien Anguenot, iLand Internet...DataStax
 
Understanding Data Consistency in Apache Cassandra
Understanding Data Consistency in Apache CassandraUnderstanding Data Consistency in Apache Cassandra
Understanding Data Consistency in Apache CassandraDataStax
 
Cassandra concepts, patterns and anti-patterns
Cassandra concepts, patterns and anti-patternsCassandra concepts, patterns and anti-patterns
Cassandra concepts, patterns and anti-patternsDave Gardner
 

Was ist angesagt? (7)

Pragmatic.bookshelf.pragmatic.ajax.a.web.2.0.primer.apr.2006
Pragmatic.bookshelf.pragmatic.ajax.a.web.2.0.primer.apr.2006Pragmatic.bookshelf.pragmatic.ajax.a.web.2.0.primer.apr.2006
Pragmatic.bookshelf.pragmatic.ajax.a.web.2.0.primer.apr.2006
 
Lesson in electric circuits v3
Lesson in electric circuits v3Lesson in electric circuits v3
Lesson in electric circuits v3
 
Cold Hard Cache
Cold Hard CacheCold Hard Cache
Cold Hard Cache
 
Metatron Technology Consulting 's MySQL to PostgreSQL ...
Metatron Technology Consulting 's MySQL to PostgreSQL ...Metatron Technology Consulting 's MySQL to PostgreSQL ...
Metatron Technology Consulting 's MySQL to PostgreSQL ...
 
Apache Cassandra Multi-Datacenter Essentials (Julien Anguenot, iLand Internet...
Apache Cassandra Multi-Datacenter Essentials (Julien Anguenot, iLand Internet...Apache Cassandra Multi-Datacenter Essentials (Julien Anguenot, iLand Internet...
Apache Cassandra Multi-Datacenter Essentials (Julien Anguenot, iLand Internet...
 
Understanding Data Consistency in Apache Cassandra
Understanding Data Consistency in Apache CassandraUnderstanding Data Consistency in Apache Cassandra
Understanding Data Consistency in Apache Cassandra
 
Cassandra concepts, patterns and anti-patterns
Cassandra concepts, patterns and anti-patternsCassandra concepts, patterns and anti-patterns
Cassandra concepts, patterns and anti-patterns
 

Andere mochten auch

Introducing Riak
Introducing RiakIntroducing Riak
Introducing RiakKevin Smith
 
Counters with Riak on Amazon EC2 at Hackover
Counters with Riak on Amazon EC2 at HackoverCounters with Riak on Amazon EC2 at Hackover
Counters with Riak on Amazon EC2 at HackoverAndrei Savu
 
Supervisord, The Process Manager
Supervisord, The Process ManagerSupervisord, The Process Manager
Supervisord, The Process Managersamof76
 
Riak a successful failure
Riak   a successful failureRiak   a successful failure
Riak a successful failureGiltTech
 
Riak - From Small to Large
Riak - From Small to LargeRiak - From Small to Large
Riak - From Small to LargeRusty Klophaus
 
Distributed Key-Value Stores- Featuring Riak
Distributed Key-Value Stores- Featuring RiakDistributed Key-Value Stores- Featuring Riak
Distributed Key-Value Stores- Featuring Riaksamof76
 
Riak in Ten Minutes
Riak in Ten MinutesRiak in Ten Minutes
Riak in Ten MinutesJon Meredith
 
Introduction to Riak - Red Dirt Ruby Conf Training
Introduction to Riak - Red Dirt Ruby Conf TrainingIntroduction to Riak - Red Dirt Ruby Conf Training
Introduction to Riak - Red Dirt Ruby Conf TrainingSean Cribbs
 
Tele3113 wk2tue
Tele3113 wk2tueTele3113 wk2tue
Tele3113 wk2tueVin Voro
 
Paczka ciasteczek
Paczka ciasteczekPaczka ciasteczek
Paczka ciasteczekderus19
 
Getting Started
Getting StartedGetting Started
Getting StartedDiveon
 
Future of cities meda city congress november 2012
Future of cities   meda city congress november 2012Future of cities   meda city congress november 2012
Future of cities meda city congress november 2012Alain Jordà
 
Ennio Ciriolo - Chi gioca con la nostra storia?
Ennio Ciriolo - Chi gioca con la nostra storia?Ennio Ciriolo - Chi gioca con la nostra storia?
Ennio Ciriolo - Chi gioca con la nostra storia?enniociriolo
 
dMT SPC Presentation Products-engl.
dMT SPC Presentation Products-engl.dMT SPC Presentation Products-engl.
dMT SPC Presentation Products-engl.dmtgms
 
Dia de-la-energia2013-Ramon Espinasa
Dia de-la-energia2013-Ramon EspinasaDia de-la-energia2013-Ramon Espinasa
Dia de-la-energia2013-Ramon EspinasaReporte Energía
 
Social Media for NFP
Social Media for NFPSocial Media for NFP
Social Media for NFPwebAssistca
 
Tele4653 l6
Tele4653 l6Tele4653 l6
Tele4653 l6Vin Voro
 
http://accountants.inboxhilllocalarea.com/
http://accountants.inboxhilllocalarea.com/http://accountants.inboxhilllocalarea.com/
http://accountants.inboxhilllocalarea.com/accountantsbh
 
আত্ম সচেতনতা অর্জনের সূত্র
আত্ম সচেতনতা অর্জনের সূত্র আত্ম সচেতনতা অর্জনের সূত্র
আত্ম সচেতনতা অর্জনের সূত্র Abul Bashar
 

Andere mochten auch (20)

Introducing Riak
Introducing RiakIntroducing Riak
Introducing Riak
 
Counters with Riak on Amazon EC2 at Hackover
Counters with Riak on Amazon EC2 at HackoverCounters with Riak on Amazon EC2 at Hackover
Counters with Riak on Amazon EC2 at Hackover
 
Supervisord, The Process Manager
Supervisord, The Process ManagerSupervisord, The Process Manager
Supervisord, The Process Manager
 
Riak a successful failure
Riak   a successful failureRiak   a successful failure
Riak a successful failure
 
Riak - From Small to Large
Riak - From Small to LargeRiak - From Small to Large
Riak - From Small to Large
 
Distributed Key-Value Stores- Featuring Riak
Distributed Key-Value Stores- Featuring RiakDistributed Key-Value Stores- Featuring Riak
Distributed Key-Value Stores- Featuring Riak
 
Riak in Ten Minutes
Riak in Ten MinutesRiak in Ten Minutes
Riak in Ten Minutes
 
Relational Databases to Riak
Relational Databases to RiakRelational Databases to Riak
Relational Databases to Riak
 
Introduction to Riak - Red Dirt Ruby Conf Training
Introduction to Riak - Red Dirt Ruby Conf TrainingIntroduction to Riak - Red Dirt Ruby Conf Training
Introduction to Riak - Red Dirt Ruby Conf Training
 
Tele3113 wk2tue
Tele3113 wk2tueTele3113 wk2tue
Tele3113 wk2tue
 
Paczka ciasteczek
Paczka ciasteczekPaczka ciasteczek
Paczka ciasteczek
 
Getting Started
Getting StartedGetting Started
Getting Started
 
Future of cities meda city congress november 2012
Future of cities   meda city congress november 2012Future of cities   meda city congress november 2012
Future of cities meda city congress november 2012
 
Ennio Ciriolo - Chi gioca con la nostra storia?
Ennio Ciriolo - Chi gioca con la nostra storia?Ennio Ciriolo - Chi gioca con la nostra storia?
Ennio Ciriolo - Chi gioca con la nostra storia?
 
dMT SPC Presentation Products-engl.
dMT SPC Presentation Products-engl.dMT SPC Presentation Products-engl.
dMT SPC Presentation Products-engl.
 
Dia de-la-energia2013-Ramon Espinasa
Dia de-la-energia2013-Ramon EspinasaDia de-la-energia2013-Ramon Espinasa
Dia de-la-energia2013-Ramon Espinasa
 
Social Media for NFP
Social Media for NFPSocial Media for NFP
Social Media for NFP
 
Tele4653 l6
Tele4653 l6Tele4653 l6
Tele4653 l6
 
http://accountants.inboxhilllocalarea.com/
http://accountants.inboxhilllocalarea.com/http://accountants.inboxhilllocalarea.com/
http://accountants.inboxhilllocalarea.com/
 
আত্ম সচেতনতা অর্জনের সূত্র
আত্ম সচেতনতা অর্জনের সূত্র আত্ম সচেতনতা অর্জনের সূত্র
আত্ম সচেতনতা অর্জনের সূত্র
 

Ähnlich wie Intro to riak

Ibm system storage solutions handbook
Ibm system storage solutions handbook Ibm system storage solutions handbook
Ibm system storage solutions handbook Diego Alberto Tamayo
 
Performance tuning for ibm tivoli directory server redp4258
Performance tuning for ibm tivoli directory server   redp4258Performance tuning for ibm tivoli directory server   redp4258
Performance tuning for ibm tivoli directory server redp4258Banking at Ho Chi Minh city
 
Expert oracle database architecture
Expert oracle database architectureExpert oracle database architecture
Expert oracle database architectureairy6548
 
Db2 v9 admin guide z os
Db2 v9 admin guide z osDb2 v9 admin guide z os
Db2 v9 admin guide z osLeo Goicochea
 
Optimizing oracle-on-sun-cmt-platform
Optimizing oracle-on-sun-cmt-platformOptimizing oracle-on-sun-cmt-platform
Optimizing oracle-on-sun-cmt-platformSal Marcus
 
Tape automation with ibm e server xseries servers redp0415
Tape automation with ibm e server xseries servers redp0415Tape automation with ibm e server xseries servers redp0415
Tape automation with ibm e server xseries servers redp0415Banking at Ho Chi Minh city
 
Ref arch for ve sg248155
Ref arch for ve sg248155Ref arch for ve sg248155
Ref arch for ve sg248155Accenture
 
46061598 xml-data-exchange-using-abap
46061598 xml-data-exchange-using-abap46061598 xml-data-exchange-using-abap
46061598 xml-data-exchange-using-abapGerda_Meier
 
IBM Flex System Networking in an Enterprise Data Center
IBM Flex System Networking in an Enterprise Data CenterIBM Flex System Networking in an Enterprise Data Center
IBM Flex System Networking in an Enterprise Data CenterIBM India Smarter Computing
 
Integrating ibm db2 with the ibm system storage n series sg247329
Integrating ibm db2 with the ibm system storage n series sg247329Integrating ibm db2 with the ibm system storage n series sg247329
Integrating ibm db2 with the ibm system storage n series sg247329Banking at Ho Chi Minh city
 
Integrating ibm db2 with the ibm system storage n series sg247329
Integrating ibm db2 with the ibm system storage n series sg247329Integrating ibm db2 with the ibm system storage n series sg247329
Integrating ibm db2 with the ibm system storage n series sg247329Banking at Ho Chi Minh city
 
RDB Synchronization, Transcoding and LDAP Directory Services ...
RDB Synchronization, Transcoding and LDAP Directory Services ...RDB Synchronization, Transcoding and LDAP Directory Services ...
RDB Synchronization, Transcoding and LDAP Directory Services ...Videoguy
 
Experiences with oracle 10g database for linux on z series sg246482
Experiences with oracle 10g database for linux on z series sg246482Experiences with oracle 10g database for linux on z series sg246482
Experiences with oracle 10g database for linux on z series sg246482Banking at Ho Chi Minh city
 
Zimbra guide admin_anglais_uniquement
Zimbra guide admin_anglais_uniquementZimbra guide admin_anglais_uniquement
Zimbra guide admin_anglais_uniquementchiensy
 
irmpg_3.7_python_202301.pdf
irmpg_3.7_python_202301.pdfirmpg_3.7_python_202301.pdf
irmpg_3.7_python_202301.pdfFernandoBello39
 
DB2 10 for Linux on System z Using z/VM v6.2, Single System Image Clusters an...
DB2 10 for Linux on System z Using z/VM v6.2, Single System Image Clusters an...DB2 10 for Linux on System z Using z/VM v6.2, Single System Image Clusters an...
DB2 10 for Linux on System z Using z/VM v6.2, Single System Image Clusters an...IBM India Smarter Computing
 

Ähnlich wie Intro to riak (20)

Ibm system storage solutions handbook
Ibm system storage solutions handbook Ibm system storage solutions handbook
Ibm system storage solutions handbook
 
Performance tuning for ibm tivoli directory server redp4258
Performance tuning for ibm tivoli directory server   redp4258Performance tuning for ibm tivoli directory server   redp4258
Performance tuning for ibm tivoli directory server redp4258
 
Expert oracle database architecture
Expert oracle database architectureExpert oracle database architecture
Expert oracle database architecture
 
Sap In-Memory IBM
Sap In-Memory IBMSap In-Memory IBM
Sap In-Memory IBM
 
Db2 v9 admin guide z os
Db2 v9 admin guide z osDb2 v9 admin guide z os
Db2 v9 admin guide z os
 
R data
R dataR data
R data
 
Optimizing oracle-on-sun-cmt-platform
Optimizing oracle-on-sun-cmt-platformOptimizing oracle-on-sun-cmt-platform
Optimizing oracle-on-sun-cmt-platform
 
Tape automation with ibm e server xseries servers redp0415
Tape automation with ibm e server xseries servers redp0415Tape automation with ibm e server xseries servers redp0415
Tape automation with ibm e server xseries servers redp0415
 
Ref arch for ve sg248155
Ref arch for ve sg248155Ref arch for ve sg248155
Ref arch for ve sg248155
 
46061598 xml-data-exchange-using-abap
46061598 xml-data-exchange-using-abap46061598 xml-data-exchange-using-abap
46061598 xml-data-exchange-using-abap
 
IBM Flex System Networking in an Enterprise Data Center
IBM Flex System Networking in an Enterprise Data CenterIBM Flex System Networking in an Enterprise Data Center
IBM Flex System Networking in an Enterprise Data Center
 
SAP In-Memory Computing on IBM eX5 Systems
SAP In-Memory Computing on IBM eX5 SystemsSAP In-Memory Computing on IBM eX5 Systems
SAP In-Memory Computing on IBM eX5 Systems
 
Integrating ibm db2 with the ibm system storage n series sg247329
Integrating ibm db2 with the ibm system storage n series sg247329Integrating ibm db2 with the ibm system storage n series sg247329
Integrating ibm db2 with the ibm system storage n series sg247329
 
Integrating ibm db2 with the ibm system storage n series sg247329
Integrating ibm db2 with the ibm system storage n series sg247329Integrating ibm db2 with the ibm system storage n series sg247329
Integrating ibm db2 with the ibm system storage n series sg247329
 
RDB Synchronization, Transcoding and LDAP Directory Services ...
RDB Synchronization, Transcoding and LDAP Directory Services ...RDB Synchronization, Transcoding and LDAP Directory Services ...
RDB Synchronization, Transcoding and LDAP Directory Services ...
 
Experiences with oracle 10g database for linux on z series sg246482
Experiences with oracle 10g database for linux on z series sg246482Experiences with oracle 10g database for linux on z series sg246482
Experiences with oracle 10g database for linux on z series sg246482
 
Zimbra guide admin_anglais_uniquement
Zimbra guide admin_anglais_uniquementZimbra guide admin_anglais_uniquement
Zimbra guide admin_anglais_uniquement
 
irmpg_3.7_python_202301.pdf
irmpg_3.7_python_202301.pdfirmpg_3.7_python_202301.pdf
irmpg_3.7_python_202301.pdf
 
pyspark.pdf
pyspark.pdfpyspark.pdf
pyspark.pdf
 
DB2 10 for Linux on System z Using z/VM v6.2, Single System Image Clusters an...
DB2 10 for Linux on System z Using z/VM v6.2, Single System Image Clusters an...DB2 10 for Linux on System z Using z/VM v6.2, Single System Image Clusters an...
DB2 10 for Linux on System z Using z/VM v6.2, Single System Image Clusters an...
 

Kürzlich hochgeladen

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
 
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
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
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
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
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
 
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
 
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
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 

Kürzlich hochgeladen (20)

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
 
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
 
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?
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
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...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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
 
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
 
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
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 

Intro to riak

  • 1. . Distributed computation on dynamo-style distributed storage: Riak pipe . An introduction to Riak Jaseem Abid September 19, 2012 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 2. . Riak . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 3. . What is Riak ? Riak is an open source, distributed NoSQL database implementing the principles from Amazon’s Dynamo paper. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 4. . Dynamo Model Riak is a highly available, proprietary key-value structured storage system or a distributed data store. It has properties of both databases and distributed hash tables (DHTs). It is not directly exposed as a web service, but is used to power parts of other Amazon Web Services such as Amazon S3. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 5. . Dynamo Model Riak is a highly available, proprietary key-value structured storage system or a distributed data store. It has properties of both databases and distributed hash tables (DHTs). It is not directly exposed as a web service, but is used to power parts of other Amazon Web Services such as Amazon S3. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 6. . Dynamo Model Riak is a highly available, proprietary key-value structured storage system or a distributed data store. It has properties of both databases and distributed hash tables (DHTs). It is not directly exposed as a web service, but is used to power parts of other Amazon Web Services such as Amazon S3. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 7. . Dynamo Model Riak is a highly available, proprietary key-value structured storage system or a distributed data store. It has properties of both databases and distributed hash tables (DHTs). It is not directly exposed as a web service, but is used to power parts of other Amazon Web Services such as Amazon S3. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 8. . Dynamo Model Riak is a highly available, proprietary key-value structured storage system or a distributed data store. It has properties of both databases and distributed hash tables (DHTs). It is not directly exposed as a web service, but is used to power parts of other Amazon Web Services such as Amazon S3. Implementations Apache Cassandra Project Voldemort Riak Amazon DynamoDB . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 9. . This talk Front Matter Dynamo (and NoSQL) are nothing new Much of Dynamo was invented > 10 years ago Dynamo chooses AP of CAP This talk will focus on properties of Dynamo-inspired systems (Riak, Cassandra, Voldemort) . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 10. . CAP theorem . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 11. . CAP theorem Consistent, writes are atomic and all subsequent requests retrieve the new value . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 12. . CAP theorem Consistent, writes are atomic and all subsequent requests retrieve the new value Available, the database will always return a value as long as a single server is running . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 13. . CAP theorem Consistent, writes are atomic and all subsequent requests retrieve the new value Available, the database will always return a value as long as a single server is running Partition Tolerant, the system will still function even if server communication is temporarily lost—that is, a network partition . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 14. . CAP theorem Consistent, writes are atomic and all subsequent requests retrieve the new value Available, the database will always return a value as long as a single server is running Partition Tolerant, the system will still function even if server communication is temporarily lost—that is, a network partition You can have only two at once. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 15. . CAP theorem Riak picks AP of CAP . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 16. . Eventual Consistency Distributed databases must be partition tolerant, so the choice between availability and consistency can be difficult. The real world is eventually consistent and works (mostly) fine *Eventual* doesn’t mean minutes, days, or even seconds in non-failure cases DNS, HTTP with Expires: header How you model the real world matters! . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 17. . Riak Architecture Amazon’s Dynamo architecture Distributed, Scalable, No single point of failure No transactions; trade strong consistency for eventual consistency . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 18. . Simple Key Value data store - Store anything Plain text, JSON, or XML to images or video clips—all accessible through a simple HTTP interface . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 19. . Simple Key Value data store - Store anything Plain text, JSON, or XML to images or video clips—all accessible through a simple HTTP interface Riak KV . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 20. . Fault-Tolerant Riak is also fault-tolerant. Servers can go up or down at any moment with no single point of failure. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 21. . Riak loves the web Query Riak via URLs, headers, and verbs, and Riak returns assets and standard HTTP response codes. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 22. . Scalable # start 4 nodes $ dev/dev1/bin/riak start $ dev/dev2/bin/riak start $ dev/dev3/bin/riak start $ dev/dev4/bin/riak start # scale out $ dev/dev2/bin/riak-admin join dev1@127.0.0.1 # scabe back in $ riak-admin leave . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 23. . Queriablity REST API Easy quick and dirty Map Reduce Provide set of starting keys, filter via map Map reduce is meant for calulations/ aggregations and not queries. Riak Search Full text search in Riak Opinionated Roll out your own indices Difficult to get it right More code to maintain Often introduces SPOFs . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 24. . Riak REST API Representational state transfer . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 25. . Riak REST API Representational state transfer Create Update Read Delete verbs . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 26. . Riak REST API Representational state transfer Create Update Read Delete verbs Riak and cURL . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 27. . REST API w/ curl $ curl http://localhost:8091/ping OK # Let’s issue a bad query. # -I tells cURL that we want only the header response. $ curl -I http://localhost:8091/riak/no_bucket/no_key HTTP/1.1 404 Object Not Found Server: MochiWeb/1.1 WebMachine/1.7.3 (participate in the frantic) Date: Thu, 04 Aug 2011 01:25:49 GMT Content-Type: text/plain Content-Length: 10 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 28. . Lets PUT something in the DB $ curl -v -X PUT http://localhost:8091/riak/favs/db -H "Content-Type: text/html" -d "<html> <body> <h1> My new favorite DB is RIAK </h1> </body> </html>" . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 29. . Now get it back curl -X GET http://localhost:8091/riak/favs/db Or just hit the browser . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 30. . Or POST it $ curl -I -X POST http://localhost:8091/riak/animals -H "Content-Type: application/json" -d '{ "nickname" : "Sergeant Stubby", "breed" : "Terrier" }' HTTP/1.1 201 Created Vary: Accept-Encoding Server: MochiWeb/1.1 WebMachine/1.7.3 (participate in the frantic) Location: /riak/animals/6VZc2o7zKxq2B34kJrm1S0ma3PO Date: Tue, 05 Apr 2011 07:45:33 GMT Content-Type: application/json Content-Length: 0 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 31. . Dump anything curl -X PUT HTTP://127.0.0.1:8091/riak/images/1.jpg -H "Content-type: image/jpeg" --data-binary @image_name.jpg . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 32. . Or DELETE it $ curl -I -X DELETE http://localhost:8091/riak/ animals/6VZc2o7zKxq2B34kJrm1S0ma3PO HTTP/1.1 204 No Content Vary: Accept-Encoding Server: MochiWeb/1.1 WebMachine/1.7.3 (participate in the frantic) Date: Mon, 11 Apr 2011 05:08:39 GMT Content-Type: application/x-www-form-urlencoded Content-Length: 0 DELETE won’t return any body, but the HTTP code will be 204 if successful. Otherwise, as you’d expect, it returns a 404. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 33. . Map Reduce Google :) *large* data sets Functional Programming Apache Hadoop Why C suck here . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 34. . The tldr; version 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). MapReduce can take advantage of locality of data, processing data on or near the storage assets to decrease transmission of data. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 35. . Map ”Map” step: The master node takes the input, divides it into smaller sub-problems, and distributes them to worker nodes. A worker node may do this again in turn, leading to a multi-level tree structure. The worker node processes the smaller problem, and passes the answer back to its master node. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 36. . Reduce ”Reduce” step: The master node then collects the answers to all the sub-problems and combines them in some way to form the output – the answer to the problem it was originally trying to solve. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 37. . JSON { "name": "John Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York" "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] } .. . .. . .. . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. . .. . .. . .. . .. .
  • 38. . Map The Riak way function (v) { return [v.phoneNumber]; } The couchDB way function (v) { emit("phone", v.phoneNumber); } . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 39. . Riak Search ... . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 40. . Riak Secondary Indices ... . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 41. . Riak … Written in : Erlang & C, some Javascript . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 42. . Riak … Protocol: HTTP/REST or custom binary . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 43. . Riak … Tunable trade-offs for distribution and replication (N, R, W) . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 44. . Riak … Pre - and post-commit hooks in JavaScript or Erlang, for validation and security. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 45. . Riak … Map/reduce in JavaScript or Erlang . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 46. . Riak … Links & link walking: use it as a graph database . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 47. . Riak … Secondary indices: but only one at once Large object support (Luwak) . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 48. . Riak … Comes in ”open source” and ”enterprise” editions . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 49. . Riak … Full-text search, indexing, querying with Riak …Search server (beta) . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 50. . Riak … In the process of migrating the storing backend from ”Bitcask” to Google ”LevelDB” . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 51. . Riak … Masterless multi-site replication replication and SNMP monitoring are commercially licensed . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 52. . Riak … Best used: If you want something Cassandra-like (Dynamo-like), but no way you’re gonna deal with the bloat and complexity. If you need very good single-site scalability, availability and fault-tolerance, but you’re ready to pay for multi-site replication. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 53. . Riak … For example: Point-of-sales data collection. Factory control systems. Places where even seconds of downtime hurt. Could be used as a well-update-able web server. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 54. . Review Multi-node Clustering MapReduce Processing Integrated Full-Text Search Secondary Indexing Masterless Multi-Site Replication Large Object Support Implementation Architecture . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 55. . Why use Riak Scalable Riak is built so you can add more capacity as your app or platform grows. When you add new machines, Riak distributes data automatically around the cluster with no downtime and a near-linear increase in performance and throughput . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 56. . Why use Riak Simple Ops Riak is the most boring database you’ll ever run in production. No sharding required, just horizontal scaling and straight-forward capacity planning. The same operational tasks apply to small clusters and large clusters. More machines does not mean more ops. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 57. . Why use Riak Masterless A Riak cluster is masterless. No node is special and any node can handle requests for any other node in the cluster. All requests to Riak happen concurrently and developers don’t have to spend time worrying about read/write locks or single points of failure. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 58. . Why use Riak Fault Tolerant Decide how many replicas of the data you want (start at 3). If nodes go down, requests are routed transparently to other nodes. Riak uses proven architectural principles like hinted handoff and read repair so you can always write and read data, even in failure conditions. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 59. . Why use Riak Complex Queries In addition to key/value access to your data, Riak has built-in support for MapReduce, Full Text Search, and Secondary Indexes, giving developers various ways to store and query their data. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 60. . Why use Riak Flexible APIs Riak is equipped with fully-featured HTTP and Protocol Buffers APIs, with support for both of these transports in all of our supported client libraries. You can also write your own client layer to wrap our APIs if your use case or preference calls for it. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 61. . Why use Riak 1000s of Users Comcast, Yammer, Voxer, Boeing, BestBuy, SEOMoz, Joyent, Kiip, DotCloud, Formspring, GitHub, and the Danish Government are just a few of the thousands of startups and enterprises that have deployed Riak. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 62. . Who uses it and why? github git.io comcast Internal object storage yammer Notifications DISQUS analytics AOL 1.5 billion data objects per day Mozilla User reviews joyent, best buy … . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 63. . Why use Riak Language Support Basho and the Riak Community maintain libraries for most major languages including Java, Node.js, Python, Ruby, PHP, C/C++, and many more. All the client code, like the core Riak code, is available on GitHub. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 64. . Why use Riak Powerful Community The Riak community is composed of smart, passionate hackers who are contributing code, support, and evangelism every day. There are hundreds of companies and individuals testing, breaking, running, and building Riak. . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  • 65. Questions? . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..