簡體   English   中英

Memcached用於社交網絡應用

[英]Memcached for Social Network Application

我在ASP.NET上問了這個問題...

http://forums.asp.net/t/1584731.aspx

...但也想在這里詢問。 我確信這個問題之前已經解決了,所以我想出了為什么要重新發明輪子了……

簡而言之,我正在使用memcached作為數據庫的緩存層來構建具有社交功能的Web應用程序。 為了簡化問題,我們假設有一個基本設置,其中有一個person表和一個friendConnection表,其中persons包含個人信息,並且friendConnection有兩個外鍵,如果一個人已經彼此聯系,則可以將一個人鏈接到另一個人(我實際上不是使用表或SQL,但問題類似)

我的緩存過期邏輯很簡單:每當發生對表的放置時,就使緩存中當前存在的與該表相關的所有select語句過期。 但是,這種邏輯在性能方面是糟糕的,因為人們之間不斷地互相友好,緩存將永遠不會持續超過幾秒鍾。

比方說,更復雜的邏輯可能會使包含當前引用的好友的所有select語句失效,但這將需要獲取與friendConnection表相關的所有select語句並檢查它們的相關性,這也將帶來性能負擔。

首先,我的問題有意義嗎?

其次,人們通常如何解決這個問題?

不要將memcached條目與表相關聯,而應將條目與實體(即行)相關聯。

例如,為每個成員創建一個memcached條目,並且該條目存儲該成員的朋友列表。

這是PHP的示例。 我知道您正在使用ASP.NET,因此請將其視為偽代碼。 :-)

<?php
$m = new Memcached();
$m->append('Luke.Doolittle', '|Bill Karwin');
$m->append('Bill Karwin', '|Luke.Doolittle');

對您的評論:

我看到的問題是,那時沒有將對象放置在memcached中的通用模式。

對。 在關系型數據庫, 數據建模正式的模式。 規范化是定義良好的數據建模方法,以減少冗余並防止異常。 最佳規范化組織由數據本身以及數據之間的關系確定

在非關系數據庫中,沒有數據建模的形式化。 組織非關系數據的最佳方法不是由數據確定的,而是需要針對該數據運行的查詢確定的 這樣,它類似於定義索引或對關系數據庫應用非規范化的過程。

對於每種類型的對象,邏輯將有所不同。 那有意義嗎?

實際上,對於需要針對該對象運行的每種查詢類型,邏輯將有所不同。 這就是導致我們將數據冗余存儲在非關系數據存儲中的原因。 因為我們可能想對同一數據運行各種查詢,所以這意味着我們需要以不同的方式訪問數據以針對每種查詢類型進行優化。

您如何使用此技術執行刪除?

從memcached中獲取整個字符串,將值分解為一個數組,刪除要刪除的元素,內爆新數組,然后將其存儲回memcached中。

我上面的例子很簡單; 它也不強制唯一性。

您可能對簽出Redis感興趣,該Redis的工作方式類似於memcached,但它本身也支持列表和集合。


我將使用歸一化規則使用SQL來關聯地存儲數據。 使用非關系型的方法對案件逐案基礎上,以提高特定高優先級的查詢性能- 你使用了分析測量,證明您的瓶頸實際上是(避免過早優化)。

我將以下內容視為非關系解決方案:

  • 非規范化
  • 索引(您知道SQL標准根本​​沒有提到索引嗎?)
  • 高速緩存
  • NoSQL數據存儲

工具箱中的工具越多,您對性能問題的響應就越靈活。

暫無
暫無

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

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