github.com/jbendotnet/noms@v0.0.0-20190904222105-c43e4293ea92/doc/decent/about.md (about)

     1  [Home](../../README.md) » [Use Cases](../../README.md#use-cases) » **Decentralized** »
     2  
     3  **About**  |  [Quickstart](quickstart.md)  |  [Architectures](architectures.md)  |  [P2P Chat Demo](demo-p2p-chat.md)  |  [IPFS Chat Demo](demo-ipfs-chat.md)
     4  <br><br>
     5  # Noms — The Decentralized Database
     6  
     7  [Noms](http://noms.io) makes it ~~easy~~ tractable to create rich,
     8  multiuser, collaborative, fully-decentralized applications.
     9  
    10  Like most databases, Noms features a rich data model, atomic
    11  transactions, support for large-scale data, and efficient searches,
    12  scans, reads, and updates.
    13  
    14  Unlike any other database, Noms has built-in multiparty sync and
    15  conflict resolution. This feature makes Noms a very good fit for P2P
    16  decentralized applications.
    17  
    18  Any number of dapp peers in a P2P network can
    19  concurrently modify the same logical Noms database, and continuously
    20  and efficiently sync their changes with each other. All peers will
    21  converge to the same state.
    22  
    23  For many applications, peers can store an entire local copy of the
    24  data they are interested in. For larger applications, it should be
    25  possible to back Noms by a decentralized blockstore like IPFS, Swarm,
    26  or Sia (or in the future, Filecoin), and store large-scale data in a
    27  completely decentralized way, without replicating it on every
    28  node. Noms also has a blockstore for S3, which is ideal for
    29  applications that have some centralized components.
    30  
    31  **We'd love to talk to you about the possibility of using noms in your project** so please don't hestitate to contact us at [noms@attic.io](mailto:noms@attic.io). 
    32  
    33  ## How it Works
    34  
    35  Think of Noms like a programmable Git: changes are bundled as commits
    36  which reference previous states of the database. Apps pull changes
    37  from peers and merge them using a principled set of APIs and
    38  strategies. Except that rather than users manually pulling and
    39  merging, applications typically do this continuously, automatically
    40  converging to a shared state.
    41  
    42  Your application uses a [Go client
    43  library](https://github.com/attic-labs/noms/blob/master/doc/go-tour.md)
    44  to interact with Noms data. There is also a [command-line
    45  interface](https://github.com/attic-labs/noms/blob/master/doc/cli-tour.md)
    46  for working with data and initial support for a [GraphQL-based query
    47  language](https://github.com/attic-labs/noms/blob/master/go/ngql/README.md).
    48  
    49  Some additional features include:
    50  * **Versioning**: It’s easy to use, compare, or revert to older database versions
    51  * **Efficient diffs**: diffing even huge datasets is efficient due to
    52    noms’ use of a novel BTree-like data structure called a [Prolly
    53    Tree](https://github.com/attic-labs/noms/blob/master/doc/intro.md#prolly-trees-probabilistic-b-trees)
    54  * **Efficient storage**: data are chunked and content-addressable, so
    55    there is exactly one copy of each chunk in the database, shared by
    56    other data that reference it. Small changes to massive data
    57    structures always result in small operations.
    58  * **Verifiable**: The entire database rolls up to a single 20-byte hash
    59   that uniquely represents the database at that moment - anyone can
    60   verify that a particular database hashes to the same value
    61  
    62  Read the [Noms design overview](https://github.com/attic-labs/noms/blob/master/doc/decent/intro.md).
    63  
    64  ## Status
    65  
    66  For overall status of the database, see [Noms Status](../../README.md#status).
    67  
    68  For the decentralized use case in particular: we are fairly confident in this approach and are actively looking for partners to work with to build it out.
    69  
    70  - [x] Demonstrate core concept of using Noms to continuously sync across many users (Done! See noms-chat demos)
    71  - [ ] Demonstrate using libp2p or similar to traverse NATs
    72  - [ ] Investigate backing IPFS with Noms rather than the reverse - this should improve stability and dramatically improve local performance
    73  - [ ] Demonstrate using IPFS with a schema that permits nodes to disappear
    74  
    75  **_If you would like to use noms in your project we’d love to hear from you_**:
    76  drop us an email ([noms@attic.io](mailto:noms@attic.io)) or send us a
    77  message in slack ([slack.noms.io](http://slack.noms.io)).