Clojure地图与“真实”数据库

时间:2013-07-18 09:39:26

标签: mysql sql database clojure

使用clojure地图与真实(例如mysql)数据库有什么优点和缺点?显然它取决于记录的数量和表的宽度,但我认为在某些时候,真实数据库的假定效率/性能超过了调用外部系统的延迟。对于现代PC(例如几GHz和GB ram),这个数据库大小的限制在哪里?如果我正在进行不涉及大量连接的真正基本查询,那么clojure地图可以和真正的数据库一样吗?

什么是真正的数据库在clojure地图的封面下做什么?为什么我不能拥有包含1000万条目的clojure地图,或者我可以吗?性能,多线程等怎么样?据推测,在db中有下面的哈希映射和O(1)或O(log N)算法,类似于clojure map和其他东西的实现。

感谢

1 个答案:

答案 0 :(得分:1)

你在这里比较苹果和橘子 - Clojure地图是低级数据结构,而像MySQL这样的RDBMS是一个成熟的软件应用程序,它提供了许多功能。老实说,我认为两者在低级别性能特征方面的比较有点误导。而是考虑每个人提供的高级功能:

Clojure maps 是内存中的数据结构。您将[key,value]对粘贴到地图中,然后您可以通过其键查看值。它们显然受到系统上可用物理内存的限制,并且在系统关闭时会丢失它们。如果你想要一个合理大小的数据集的短期键值存储,它们就很棒。

RDBMS 通常位于自己的进程中,您使用网络协议进行通信(尽管有些可以嵌入进程中)。它提供了许多低级数据结构所没有的功能,例如访问控制,复制等,但最重要的可能是:

  • 数据的磁盘持久性。
  • 用于查询和更新数据存储内容的高级语言。

由于RDBMS具有事务性和持久性功能,因此它将比内存映射慢得多。您的设置,配置和维护也需要付出更多努力。

选择使用哪一个真正归结为您的应用程序所需的功能。如果您关心持久性或高级查询语言,那么您将需要查看RDBMS或一些更新的数据库技术,如Mongo,Couch或Datomic。