簡體   English   中英

在 Memory 數據庫中

[英]In Memory Database

我正在使用 SqlServer 來驅動 WPF 應用程序,我目前正在使用 NHibernate 並預讀取所有數據,因此出於性能原因將其緩存。 這適用於單個客戶端應用程序,但我想知道 memory 數據庫中是否有我可以使用的數據庫,以便我可以在同一台機器上的多個應用程序之間共享信息。 理想情況下,這將位於我的 NHibernate 堆棧下方,因此我的代碼不必更改。 實際上,我希望將我的數據庫從服務器上的傳統格式移動到客戶端上的 memory 數據庫中。

注意我只需要 select 功能。

如果您甚至需要將所有信息加載到 memory 中,我會感到非常驚訝。 我這么說是因為,舉個例子,我目前正在開發一款 Web 應用程序,該應用程序(由於各種原因)在許多頁面上加載了數千條記錄。 這是 PHP + MySQL。 即便如此,它也可以在 100 毫秒內完成並渲染頁面。

在您沿着這條路線走 go 之前,請確保您必須這樣做。 首先使您的數據庫盡可能高性能。 現在顯然這包括諸如擁有適當的索引和調整數據庫之類的事情,但即使是本末倒置。

首先,你需要確保你有一個良好的關系數據 model:一個適合於高性能查詢的數據。 這既是藝術,也是科學。

此外,您可能喜歡 NHibernate 但ORM 並不總是最佳選擇 例如,在某些極端情況下,手工編碼的 SQL 會非常出色。

現在假設您有一個良好的數據 model 並假設您已經優化了索引和數據庫參數,然后您已經正確配置了 NHibernate,那么只有這樣您才應該考慮將數據存儲在 ZCD69B4957F06CD818D82.917BF3D6198 中,並且僅當性能仍然存在時

從這個角度來看,我需要這樣做的唯一時間是在需要每天執行數百萬筆交易的系統上。

避免內存緩存的一個原因是它增加了很多復雜性。 您必須處理諸如緩存到期、對底層數據存儲的獨立更新、使用同步還是異步更新、如何為客戶端提供一致(如果不是最新)數據視圖、如何處理等問題具有故障轉移和復制等功能。 需要付出巨大的復雜性成本。

假設您已完成上述所有操作並且仍然需要它,那么在我看來,您需要的是緩存或網格解決方案。 這是Java 網格/集群解決方案的概述,但其中許多(例如 Coherence、memcached)也適用於.Net。 .Net 的另一個選擇是Velocity

需要指出並強調的是,像 NHibernate 這樣的東西只有在沒有任何外部更新數據庫並且只有一個啟用 NHibernate 的進程(除非集群解決方案)的情況下是一致的。 如果兩台不同 PC 上的兩個桌面應用程序都使用 NHibernate 更新同一個數據庫,則緩存將無法正常工作,因為持久性單元根本不會知道另一個正在進行的更改。

您可以使用HANA,快遞版。 您可以免費下載它,它是內存中的、柱狀的,並允許進一步的分析功能,例如文本分析、地理空間或預測。 您還可以使用 ODBC、JDBC、node.js hdb 庫、Z50780F47F65800D47D60BC4 等訪問

http://www.db4o.com/可以成為你的朋友!

Velocity是一個進程外的 object 緩存服務器,由 Microsoft 設計,幾乎可以滿足您的需求,盡管目前它只是 CTP 形式。

我相信memcached也有包裝器,也可以用來緩存對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM