如何确定数据库服务器或嵌入式数据库是否合适

How to detemine if database server or embedded database is appropriate

Bolt is a pure Go key/value store inspired by Howard Chu's and the LMDB project. The goal of the project is to provide a simple, fast, and reliable database for projects that don't require a full database server such as Postgres or MySQL.

Bolt readme

如何确定应用程序是否需要完整的数据库服务器?我认为这与并发作者的数量有关?

我打算编写一个简单的分布式社交网络应用程序作为一个有趣的项目。

  1. 一个 embedded database 驻留在应用程序中。它不需要是相关的。

    例如,您计算机上的媒体管理器中嵌入了一个数据库,用于存储 audio/video 元数据和文件位置。这个数据库可以是关系型的,在这种情况下,数据库可以是 sqlite 或 mysql 之类的东西。 (我不认为可以将 postgres 嵌入到应用程序中进行部署)。如果您想缓存本地信息,或者您确定应用程序内的信息不需要为了应用程序的功能而与外部进行通信,则嵌入式数据库非常有用。嵌入式数据库的核心设计目标是占用空间小,因此在许多情况下,嵌入式数据库会忽略专用数据库中的功能。

  2. 专用数据库服务器支持一个或多个客户端的读写操作,通常提供比嵌入式版本更多的功能。 Postgres 和 Mysql 都是专用数据库,在网络应用中被广泛使用。它们也是关系数据库,而不是键值存储,而 Bolt 似乎是。

  3. 键值存储是非关系数据库。想想 redis(或 python 中的 dicts),其中

    • 检索:客户端给数据库key,数据库返回value。
    • 赋值:客户端向数据库提供key&value,数据库根据给定的值赋值给新的key,或者更新已有key的值。

    注意:postgreshstore,这是一个键值存储。

就像关系数据库一样,键值数据库可以嵌入或单独驻留在专用硬件上。以下是在做出这些架构决策时必须提出的一些示例问题。

  1. 我的应用程序是否依赖于需要通信的数据,我想通过写入中央数据库来通信数据,还是每个聊天客户端都连接到对等点上的另一个客户端对等模型并存储自己的数据?

  2. 我的应用程序中是否需要关系模型、键值存储或其他一些奇特的数据模型?

只是我个人的看法,关系模型在过去 30 多年里成功地满足了各种各样的持久性需求。无论是嵌入式部署还是专用部署,都有非常成熟的解决方案。这是一个很好的起点。