接触Datomic
Posted | archive
从HN上看到过好多次 Datomic,但是今天才仔细看了下。
看不到Infoq视频的可以看这里中文 Datomic的架构
so far的一些观点:
- 这货的Datom不就是典型的EAV设计么。带一个timestamp,不错。只是一般EAV的entity是类似一个class,而Datom的EAV只是一个flat展开的,entity仅仅作为类似PrimiaryKey的存在。
- (RDF Triple](http://www.w3.org/TR/rdf-concepts/#section-triples)跟EAV类似的思想,今天学习到了。主语 - 谓词 - 宾语 来表达数据
- 这货的backend非常灵活,可以是传统SQL或NoSQL数据库。存储方式也可以localStorage或者MEM DB
- 这货的query接口非常好,居然是用的Datalog。这种deductive思路跟Prolog一样都是很高阶的东西。
- 因为Datom带了timestamp,所以数据DML模式不再是 CRUD,而是 CRA (Create Read Append)。好东西!这个就达到了data immutability。然后就可以被各种函数轮了。
- 跟graph db一样,默认全局m2m join的。
- 在上边这些概念的基础上,做到ACID 和 scaling。但是价格贼贵啊。我擦。
- 抛弃传统的查询模型。传统的查询模型是C/S架构,客户端组织好结构化查询语言,服务器db container负责解析,db engine负责数据输出。Datomic可以在本地Peer做过滤和数据处理。服务器Transactor可以做更加神奇的事情
- 服务器Transactor神奇之处在于支持自定义first-class函数。这就牛逼了。等会儿我专门写写这个。
仔细想了下,这个完美的大饼还是有很多弱点的。
比如CRA模式就不能很容易实现counter,比如类似reddit、HN那种多少人赞成/反对。
看到Datomic官方论坛里也承认了,aggregation的支持还是WIP。
但是如果Datomic做好了,那种演绎式查询还是可以做得非常强大的。比如可以按人群区分赞成/反对。传统rdbms做起来就麻烦了。
同时也想到了time series db的问题,Datomic做起来似乎也比较吃力。
乱写一点,继续看。这个入门文章看起来不错。
btw 自己挖坑轮ORM的一定要看这篇文章O/R impedance mismatch。精彩。Datomic号称解决了这个问题。
Comments