How does the storage backend influence Datomic?

konr

How should I pick the backend storage service for Datomic?

Is it a matter of preference to select, say, DynamoDB instead of Postgres, or does each option have different tradeoffs? If so, what are they?

a2ndrade

Storage Services Requirements

Datomic' storage services should generally meet 3 requirements:

  1. Implement key-value store semantics: efficient read/write access using indexed keys’ values
  2. Support consistent reads. e.g. read your own writes. Ideally, no-contention/lock-free reads.
  3. Support conditional puts. e.g. optimistic locking + snapshot isolation.

Datomic uses storages services to store blocks of sorted, compressed datoms, similar to the way traditional database systems use file systems and the requirements above are pretty much the API between the underlying storage service and Datomic. So the choice in storage services depend on how well they support those three requirements.

Write Scalability

Datomic doesn't usually put a lot of write pressure on the underlying storage service since there's only one component writing to it, the Transactor. Also, Datomic uses a background indexing job to integrate novelty into storage once enough of it has been accumulated (by default ~32MB but can be configured) which further reduces the constant write load. The only thing Datomic immediately writes is the transaction log.

Read Scalability

Datomic uses multiple layers of caching i.e. memcached and peers cache so in ideal circumstances i.e. when the working set fits in memory, the systems won't put a lot o read pressure either.

System Load

If your system doesn't require huge write scalability and your application data tends to fit in memory, then the choice of a particular storage service is irrelevant except, of course, for their operational capabilities (backups, admin tools, etc.) which have nothing to do with Datomic.

If, on the other hand, you system does require huge write scalability or you have a great number of peers, each of them working with more data than can fit in their memory (forcing a lot of data segments to be brought from storage), you'll require a storage system that can horizontally scale e.g. DynamoDB. As mentioned in one of the comments, if you need arbitrary write scalability, Datomic is not the right system for you anyway.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

How does AJAX influence variables and functions in PHP?

From Dev

How does @Transactional influence current session in Hibernate?

From Dev

How does the order of arguments influence the speed of find

From Dev

How does inserting new SSD will influence perfomance?

From Dev

How does AJAX influence variables and functions in PHP?

From Dev

How does (boost like) header only libraries influence compilation size?

From Dev

How does @FunctionalInterface influence the JVM's runtime behavior?

From Java

How does HasCallStack influence the performance of a normal branch in Haskell?

From Dev

Threading. How does button click interrupt/influence program flow

From Dev

How does the DOCTYPE declared as DTD influence XSLT transformation?

From Dev

C/C++ How does the number of labels (goto) influence performance?

From Dev

How does document.write() influence the functionality of jQuery?

From Dev

C/C++ How does the number of labels (goto) influence performance?

From Dev

How does Datomic compare to Neo4j?

From Dev

How does Datomic compare to Neo4j?

From Dev

How to delete graph in Titan with Cassandra storage backend?

From Dev

How to retrieve meta from celery backend storage

From Dev

What does the change of the clocksource influence?

From Dev

How to retract attributes in Datomic?

From Dev

How to use / in a Datomic query?

From Dev

In XML Schema complex type, how does restriction influence set of allowed attributes?

From Dev

How does endianess influence drawing pixels in BMP file using Bresenham algorithm in MIPS?

From Dev

How does GL_ARB_shader_group_vote influence shader performance?

From Dev

How does endianess influence drawing pixels in BMP file using Bresenham algorithm in MIPS?

From Dev

How does GL_ARB_shader_group_vote influence shader performance?

From Dev

How CSS influence loading times

From Dev

How to set storage engine in Django with MySQL connector/python as backend

From Dev

How configure multiple cassandra nodes as storage.backend in Rexster config?

From Dev

How can I use DynamoDB Janusgraph Storage Backend using SBT?

Related Related

  1. 1

    How does AJAX influence variables and functions in PHP?

  2. 2

    How does @Transactional influence current session in Hibernate?

  3. 3

    How does the order of arguments influence the speed of find

  4. 4

    How does inserting new SSD will influence perfomance?

  5. 5

    How does AJAX influence variables and functions in PHP?

  6. 6

    How does (boost like) header only libraries influence compilation size?

  7. 7

    How does @FunctionalInterface influence the JVM's runtime behavior?

  8. 8

    How does HasCallStack influence the performance of a normal branch in Haskell?

  9. 9

    Threading. How does button click interrupt/influence program flow

  10. 10

    How does the DOCTYPE declared as DTD influence XSLT transformation?

  11. 11

    C/C++ How does the number of labels (goto) influence performance?

  12. 12

    How does document.write() influence the functionality of jQuery?

  13. 13

    C/C++ How does the number of labels (goto) influence performance?

  14. 14

    How does Datomic compare to Neo4j?

  15. 15

    How does Datomic compare to Neo4j?

  16. 16

    How to delete graph in Titan with Cassandra storage backend?

  17. 17

    How to retrieve meta from celery backend storage

  18. 18

    What does the change of the clocksource influence?

  19. 19

    How to retract attributes in Datomic?

  20. 20

    How to use / in a Datomic query?

  21. 21

    In XML Schema complex type, how does restriction influence set of allowed attributes?

  22. 22

    How does endianess influence drawing pixels in BMP file using Bresenham algorithm in MIPS?

  23. 23

    How does GL_ARB_shader_group_vote influence shader performance?

  24. 24

    How does endianess influence drawing pixels in BMP file using Bresenham algorithm in MIPS?

  25. 25

    How does GL_ARB_shader_group_vote influence shader performance?

  26. 26

    How CSS influence loading times

  27. 27

    How to set storage engine in Django with MySQL connector/python as backend

  28. 28

    How configure multiple cassandra nodes as storage.backend in Rexster config?

  29. 29

    How can I use DynamoDB Janusgraph Storage Backend using SBT?

HotTag

Archive