5

我們在Google應用程序引擎上運行Java應用程序。有一種叫聯繫。以下是示例模式設計應用程序引擎數據存儲區和文本搜索建模的最佳方式

Contact 
{ 
    long id 
    String firstName 
    String lastName 
    ... 
} 

以上是existig模式,支持少數要求我們存儲這個對象無論是在數據存儲和文本搜索

現在,我們要整合他們的頁面訪問量數據觸點。

每個聯繫人可以有成千上萬的網頁瀏覽記錄,甚至上百萬的一些接觸

下面是示例頁面訪問對象[注:我們沒有這個對象,截至目前,這只是提供有關信息頁面訪問]

PageVisit 
{ 

    long id 
    String url 
    String refUrl 
    int country 
    String city 
    .... 
} 

我們有一個要求,這需要在接觸核心屬性和他訪問的頁面數據

爲前一查詢:

select * from Contact where firstName = 'abc' and url = 'cccccc.com'; 
select * from Contact where firstName = 'abc' or url = 'cccccc.com'; 

要寫這種類型的查詢,我們需要聯繫核心屬性和他們訪問的頁面需要聯繫對象本身可用,但聯繫 可以有大量的頁面瀏覽量。所以這會跨越實體最大尺寸限制

那麼在數據存儲和文本搜索這兩種情況下如何設計接觸模型。

感謝

回答

1

雲存儲不支持聯接,所以你需要從客戶端代碼的一些方式來處理這個問題。

2層可能的方法來處理這個問題是:

進行非標準化的聯繫,你需要尋找到PageVisit:

PageVisit 
{ 

    long id 
    String firstName // Denormalized from Contact 
    String url 
    String refUrl 
    int country 
    String city 
    .... 
} 

這需要您創建一個綜合指數:

- kind: PageVisit 
    ancestor: no 
    properties: 
    - name: firstName 
    - name: url 

或運行多個查詢

select id from Contact where firstName = 'abc' 

select * from PageVisit where contactId={id} and url = 'cccccc.com'; 
select * from PageVisit where contactId={id} or url = 'cccccc.com'; 

這需要您創建一個綜合指數:

- kind: PageVisit 
    ancestor: no 
    properties: 
    - name: contactId 
    - name: url 

最後的旁白:根據您的網站有多大,它可能是值得探討的Cloud Bigtable的瀏覽量數據。對於高寫入OLAP風格的工作負載來說,這是一個更好的解決方案。

相關問題