2015-05-11 53 views
1

Bolt是Howard Howard's和LMDB項目啓發下的一個純粹的Go關鍵/值存儲。該項目的目標是爲不需要完整數據庫服務器(如Postgres或MySQL)的項目提供一個簡單,快速且可靠的數據庫。如何確定數據庫服務器或嵌入式數據庫是否合適

Bolt readme

一個人如何確定應用是否需要一個完整的數據庫服務器?我認爲它與併發作家的數量有關?

我打算編寫一個簡單的分佈式社交網絡應用程序作爲一個有趣的項目。

回答

4
  1. embedded database駐留在應用程序中。它不需要是關係型的。

    例如,計算機上的媒體管理器中嵌入了一個數據庫,用於存儲音頻/視頻元數據和文件位置。這個數據庫可能是關係型的,在這種情況下,數據庫可能是像sqlite或mysql這樣的東西。 (我不認爲postgres可以被嵌入到應用程序中)。如果您想要緩存本地信息,或者您確信應用程序中的信息不需要爲了應用程序的功能而外部傳輸,嵌入式數據庫就非常棒。嵌入式數據庫的核心設計目標是佔用空間小,因此在許多情況下,嵌入式數據庫省略了專用數據庫中的特徵。

  2. 專用數據庫服務器支持一個或多個客戶端的讀寫操作,通常提供比嵌入式版本更多的功能。 Postgres和Mysql都是專用數據庫,廣泛用於網絡應用。它們也都是關係數據庫,而不是Bolt似乎的關鍵值存儲。

  3. 關鍵值存儲是非關係數據庫。想想redis(或dicts在python),其中

    • 檢索:客戶提供了數據庫中的密鑰,並且數據庫與價值響應。
    • 指定:客戶端向數據庫提供鍵值&,並且數據庫分配具有給定值的新鍵或更新現有鍵的值。

    注:postgreshstore,這是一個關鍵價值商店。

就像關係數據庫一樣,鍵值數據庫可以嵌入到專用硬件中,也可以分別駐留在專用硬件上。以下是在做出這些架構決策時必須提出的一些示例問題。

  1. 請問我的應用程序依賴於需要被傳輸的數據,並做我想通過寫一箇中央數據庫通信的數據,還是每個聊天客戶端連接到其他客戶端上的點對點模式並存儲自己的數據?

  2. 在我的應用程序,鍵值存儲或其他奇特數據模型中是否需要關係模型?

只是我個人的看法,關係模型已經成功地在過去的30多年裏滿足各種各樣的持續需求。對於嵌入式或專用部署都有非常成熟的解決方案。這是一個開始的好地方。