

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Neptune 與 Neo4j 之間的架構差異
<a name="migration-architectural-differences"></a>

當客戶第一次考慮將應用程式從 Neo4j 遷移到 Neptune 時，通常很容易根據執行個體大小執行類似的比較。不過，Neo4j 和 Neptune 的架構有著根本上的差異。Neo4j 基於一體化方法，其中資料載入、資料 ETL、應用程式查詢、資料儲存以及管理操作都在同一組運算資源 (例如 EC2 執行個體) 中進行。

相比之下，Neptune 是以 OLTP 為中心的圖形資料庫，其中架構會分隔責任且資源會被分開，以便它們可以動態和獨立擴展。

從 Neo4j 遷移到 Neptune 時，請確定應用程式的資料持久性、可用性和可擴展性需求。Neptune 的叢集架構可簡化需要高持久性、可用性和可擴展性之應用程式的設計。了解 Neptune 的叢集架構後，您就可以設計 Neptune 叢集拓撲來滿足這些需求。

## Neo4j 的叢集架構
<a name="migration-neo4j-cluster-architecture"></a>

許多生產應用程式會使用 Neo4j 的[因果叢集](https://neo4j.com/docs/operations-manual/current/clustering/introduction/)來提供資料持久性、高可用性和可擴展性。Neo4j 的叢集架構會使用核心伺服器和僅供讀取複本執行個體：
+ 核心伺服器透過使用 Rraft 通訊協定複寫資料，提供資料持久性和容錯能力。
+ 僅供讀取複本會使用交易日誌傳送，以非同步方式複寫高讀取輸送量工作負載的資料。

叢集中的每個執行個體 (不論是核心伺服器還是僅供讀取複本) 都包含圖形資料的完整副本。

## Neptune 的叢集架構
<a name="migration-neptune-cluster-architecture"></a>

[Neptune 叢集](feature-overview-db-clusters.md)是由一個主要寫入器執行個體和最多 15 個僅供讀取複本執行個體組成。叢集中的所有執行個體共用與執行個體分開的相同基礎分散式儲存服務。
+ 主要寫入器執行個體會協調資料庫的所有寫入操作，並可垂直擴展，以針對不同的寫入工作負載提供彈性支援。它還支援讀取操作。
+ 僅供讀取複本執行個體支援基礎儲存磁碟區的讀取操作，並可讓您水平擴展以支援高讀取工作負載。它們也會做為主要執行個體的容錯移轉目標，以提供高可用性。
**注意**  
對於繁重的寫入工作負載，最好將僅供讀取複本執行個體擴展至與寫入器執行個體相同的大小，以確保讀取器可以與資料變更保持一致。
+ 基礎儲存磁碟區會在資料庫中的資料增加時自動擴展儲存體容量，儲存體最多可為 128 TiB。

執行個體大小是動態且獨立的。每個執行個體都可以在叢集執行時調整大小，而且可以在叢集執行時新增或移除僅供讀取複本。

[Neptune Serverless](neptune-serverless.md) 功能可以隨著需求增加和降低自動擴展您的運算容量。這不僅可以降低您的管理負荷，還可以讓您設定資料庫來處理需求中的大量激增，而不會降低效能或要求您過度佈建。

您最多可以停止 Neptune 叢集 7 天。

Neptune 還支援[自動擴展](manage-console-autoscaling.md)，以根據工作負載自動調整讀取器執行個體大小。

使用 Neptune 的[全球資料庫功能](neptune-global-database.md)，您最多可在 5 個其他區域鏡像叢集。

Neptune 也會[特意設計為具備容錯能力](backup-restore-overview-fault-tolerance.md)：
+ 將資料儲存提供給叢集中所有執行個體的叢集磁碟區跨越單一 AWS 區域中的多個可用區域 (AZ)。每個可用區域都包含叢集資料的完整副本。
+ 如果主要執行個體無法使用，Neptune 會自動容錯移轉到現有的僅供讀取複本，資料不會遺失，通常在 30 秒內完成。如果叢集中沒有現有的僅供讀取複本，Neptune 會自動佈建新的主要執行個體 - 同樣，不會遺失資料。

這一切意味著，從 Neo4j 因果叢集遷移到 Neptune 時，您不必明確地架構叢集拓撲，以實現高資料持久性和高可用性。這使您只需透過幾種方式便可針對預期的讀取和寫入工作負載，以及任何增加的可用性需求調整叢集大小：
+ 若要擴展讀取操作，請[新增僅供讀取複本執行個體](feature-overview-db-clusters.md#feature-overview-read-replicas)或啟用 [Neptune Serverless](neptune-serverless.md) 功能。
+ 若要改善可用性，請將叢集中的主要執行個體和僅供讀取複本分佈在數個可用區域 (AZ) 上。
+ 若要縮短任何容錯移轉時間，請至少佈建一個僅供讀取複本執行個體，做為主要執行個體的容錯移轉目標。您可以[指派每個複本的優先順序](manage-console-add-replicas.md)，確定僅供讀取複本執行個體在失敗之後提升為主要執行個體的順序。最佳實務是確保容錯移轉目標具有能夠處理應用程式寫入工作負載的執行個體類別 (如果提升為主要執行個體的話)。