-1

使用 clojure 映射与真实(例如 mysql)数据库的优缺点是什么?显然,这取决于记录的数量和表的宽度,但我假设在某些时候,假定的真实数据库的效率/性能超过了调用外部系统的延迟。对于现代 PC(例如几个 GHz 和 GB 内存),就数据库大小而言,这个限制在哪里?如果我正在执行不涉及大量连接的非常基本的查询,那么 clojure 映射是否可以像真正的数据库一样好?

真正的数据库在 clojure 映射没有的幕后工作是什么?为什么我不能有一个包含 1000 万个条目的 clojure 映射,或者我可以吗?性能或多线程等怎么样?大概在 db 中有哈希映射和 O(1) 或 O(log N) 算法在下面进行,类似于 clojure 映射和其他东西的实现方式。

谢谢

4

1 回答 1

1

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

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

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

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

由于 RDBMS 具有事务性和持久性功能,它会比内存中的映射慢得多。您在设置、配置和维护方面也将付出更多努力。

选择使用哪一个实际上取决于您的应用程序需要哪些功能。如果您关心持久性或高级查询语言,那么您将需要研究 RDBMS 或一些更新的数据库技术,例如 Mongo、Couch 或 Datomic。

于 2013-07-18T14:43:54.543 回答