The idea seems very interesting, but the non-free aspect of this seems likely to limit its uptake. I cannot install a version of this for small-scale, personal, or not-for-profit needs other than using a non-durable VM that saves state only when suspended. Even if I buy into the Datomic pricing model and that pricing is not prohibitive, I am still bound to Amazon's pricing model (though hopefully that will expand ove…
I think Rich & the gang need to focus on a niche market for now as this technology matures. I expect they will work with a handful of enterprise clients for now but roll out "convenience features" in the future (i.e. easy to use and inexpensive hosting for smaller customers.)
Rich Hickey's new project: datomic.com
71–80 of 111 posts
Re: Rich Hickey's new project: datomic.com
#72It looks like a very cool product/service, but there's something... off... about this landing page. I can't quite put my finger on it. Two things I can think of right off the bat: 1. The use of the term "whitepaper". It's very "enterprisey" 2. It took me a bit of perusing to figure out what the product IS. I think the lead paragraph may need some tweaking In all, the landing page makes the product feel intimidating.…
As a tangent, I'm really curious as to why this document is in a PDF file instead of simply being a web page. I can't see that doing much other than making it less convenient to read.
Re: Rich Hickey's new project: datomic.com
#73Earlier quoted context omitted.
Get from server through network, of course. In the meantime, peers cache "facts" using LRU replacement policy.
So lets suppose I have several billion integers sitting in a data store, and I want to sort, count, and sum them. Do I have to collect all this data to my local cache first? What if millions of people are using my application who want the same value?
If you performed this type of calculation before with a traditional database, you had to have a powerful enough to computer to perform the calculation. In this model, you would still have that computer; it's just now a "peer".
If millions of people want the same piece of data that requires a huge calculation to get, then you would set up one powerful machine of your own just to do this calculation and then write the result to the database, so the many "thin" peers can just read the result.
Re: Rich Hickey's new project: datomic.com
#74"Datomic is not an update-in-place system. All data is retained by default." I'm becoming more and more convinced that your canonical data store should be append-only whenever possible (see eg [1][2] for detailed arguments). It's nice to see first class support for this. [1] http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html [2] http://martinfowler.com/articles/lmax.html EDIT: Just read through the whitepape…
Re: Rich Hickey's new project: datomic.com
#75[1] http://www.joelonsoftware.com/articles/LeakyAbstractions.htm...
[2] "A Note on Distributed Computing" (http://labs.oracle.com/techrep/1994/smli_tr-94-29.pdf)
[3] Please correct me if that synopsis is wrong
Re: Rich Hickey's new project: datomic.com
#76Earlier quoted context omitted.
I agree with you on the landing page. The introductory paragraph seems rather "fluffy". That combined with the fact that it uses a whitepaper immediately gave me the feeling that it's not really meant as something for regular programmers to check out and hack with. It's surprising, since that's how many Clojure programmers get their start. On the other hand, it's very new so maybe they'll add more developer-friendly…
Maybe its so new and unique that its hard or impossible to explain it in a pragraph.
Here's the shortest what and why I could come up with:
Questioning Assumptions
Many relational databases today operate based on assumptions that were true in the 1970s but are no longer true. Newer solutions such as key-value stores ("NoSQL") make unnecessary compromises in the ability to perform queries or make consistency guarantees. Datomic reconsiders the database in light of current computer set-ups: millions of times larger and faster disks and RAM, and distributed architectures connected over the internet.
Data Model
Instead of using table-based storage with explicit schemas, Datomic uses a simpler model wherein the database is made up of a large collection of "datoms" or facts. Each datom has 4 parts: an entity, an attribute, a value, and a time (denoted by the transaction number that added it the database). Example:
John, :street, "23 Swift St.", T27
This simple data model has two main benefits. It makes your data less rigid and hence more agile and easier to change. Additionally, it makes it easy to handle data in non-traditional structures, such as hierarchies, sets or sparse tables. It also enables Datomic's time model...Time
Like Clojure, Datomic incorporates an explicit model of time. All data is associated with a time and new data does not replace old data, but is added to it. Returning to our previous example, if John later changes his address, a new datom would be added to the database, e.g.
John, :street, "17 Maple St.", T43
This mirrors the real world where the fact that John has moved does not erase the fact that John once lived on Swift St. This has multiple benefits: the ability to view the database at a point in time other than the present; no data is lost; the immutability of each datom allows for easy and pervasive caching.Move Data and Data Processing to Peers
Traditionally databases use a client-server model where clients send queries and commands to a central database. This database holds all the data, performs all data processing, and manages the data storage and synchronization. Clients may only to access the data through the interface the server provides - typically SQL strings which may include a (relatively small) set of functions provided by the database.
Datomic breaks this system apart. The only centralized component is data storage. Peers access the data storage through a new distributed component called a transactor. Finally, the most important part, data processing, now happens in the clients, which, considering their importance, have been renamed "peers".
Queries are made in a declarative language called Datalog which is similar to but better than SQL. It's better because it more closely matches the model of the data itself (rather than thinking in terms of the implementation of tables in a database). Additionally, it's not restricted like SQL. It allows you to use your full programming language. You can write reusable rules that can then be composed in queries. Additionally, you can call any of your own functions. This is a big step up in power and it's made practical because of the distribution. If ran your query on central server, you'd have to be concerned about tying up a scare resource with a long-running query. When processing locally, that's not a concern.
When a query is performed that data is loaded from central storage and placed into RAM (if it will fit). Later queries can use this locally cached data for fast queries.
----
That's definitely not all it does or all the benefits, but hopefully that's a good start.
Re: Rich Hickey's new project: datomic.com
#77Earlier quoted context omitted.
Maybe its so new and unique that its hard or impossible to explain it in a pragraph.
I think this has a lot to do with it. After an hour of reading, watching and thinking, I can't come up with any way to put it into one paragraph. Here's the shortest what and why I could come up with: Questioning Assumptions Many relational databases today operate based on assumptions that were true in the 1970s but are no longer true. Newer solutions such as key-value stores ("NoSQL") make unnecessary compromises in…
Do transaction numbers have total order or just partial order? Total order is serializing. (And no, using real time as the transaction number doesn't help because it's impossible to keep an interesting number of servers time-synched.) Partial order is "interesting".
Re: Rich Hickey's new project: datomic.com
#78Earlier quoted context omitted.
Maybe its so new and unique that its hard or impossible to explain it in a pragraph.
I think this has a lot to do with it. After an hour of reading, watching and thinking, I can't come up with any way to put it into one paragraph. Here's the shortest what and why I could come up with: Questioning Assumptions Many relational databases today operate based on assumptions that were true in the 1970s but are no longer true. Newer solutions such as key-value stores ("NoSQL") make unnecessary compromises in…
*Transactions as first-class entities
Transactions are just data like everything else, and can add facts about them like anything else. For example, who created the transaction. What did the database look like before and after transaction.
Additionally, you can subscribe to the queue of transactions, if you wanted to watch for and react to events of a certain nature. This very difficult in most other systems.
Re: Rich Hickey's new project: datomic.com
#79Earlier quoted context omitted.
I think this has a lot to do with it. After an hour of reading, watching and thinking, I can't come up with any way to put it into one paragraph. Here's the shortest what and why I could come up with: Questioning Assumptions Many relational databases today operate based on assumptions that were true in the 1970s but are no longer true. Newer solutions such as key-value stores ("NoSQL") make unnecessary compromises in…
> a time (denoted by the transaction number that added it the database). Do transaction numbers have total order or just partial order? Total order is serializing. (And no, using real time as the transaction number doesn't help because it's impossible to keep an interesting number of servers time-synched.) Partial order is "interesting".
The transactor is a single point of failure.
However, since its only job is doing the transactions, the idea is it can be faster than a database server that does both the transactions and the queries.
Re: Rich Hickey's new project: datomic.com
#80Earlier quoted context omitted.
I think Rich & the gang need to focus on a niche market for now as this technology matures. I expect they will work with a handful of enterprise clients for now but roll out "convenience features" in the future (i.e. easy to use and inexpensive hosting for smaller customers.)
Certainly that's one approach. The one that seems more likely to generate widespread use is to put a tool in the hands of lots of developers, making it easy for more people to get involved and for unexpected uses to happen (e.g. MySQL v Oracle - though I'm not suggesting that the cost scales are equivalent here, it's merely the first example that comes to mind).