簡體   English   中英

在Mac App和Web之間同步獲得大量小數據的最佳方法是什么?

[英]What's the best way to get a 'lot' of small pieces of data synced between a Mac App and the Web?

我正在考慮MongoDB。 這樣的目標很明確,需要做的是:在我的應用程序中,Finch(finchformac.com了解詳情)我每天都有成千上萬的條目為每個用戶打開了什么窗口,打開它的時間,他們關閉它的時間,以及他們選擇一個標簽的標簽。 我需要在線備份這些數據,以便它可以同步到其他Mac計算機等。我還需要能夠從他們的數據在線繪制圖表,這意味着一些復雜的查詢會觸及數十萬條記錄。

現在我嘗試使用Ruby / Rails / Mongoid在應用程序端使用JSON解析器一次以10,000個記錄的增量發送數據,數據通過后台mapreduce作業處理到其他集合。 但是,這一切似乎都阻止了,最終太慢了。 (如果有的話)有什么建議可以解決這個問題?

你有一個復雜的問題,這意味着你需要把它分解成更小,更容易解決的問題。

問題(我認為):

  1. 你有一個收集數據的應用程序。 您只需將數據存儲在本地某處,直到它與服務器同步為止。
  2. 您已經收到了服務器上的數據,現在您需要足夠快地將其推送到數據庫中,以免速度變慢。
  3. 你必須報告這些數據,這聽起來既困難又復雜。

您可能希望將其寫為某種API,為簡單起見(並且由於您在客戶端上有大量的備用處理周期),您需要將客戶端處理的這些數據塊准備好導入到JSON中。數據庫。 一旦你有了JSON,你就不需要Mongoid(你只需要將JSON直接扔進數據庫)。 你也可能不需要rails,因為你只是創建一個簡單的API,所以堅持使用Rack或Sinatra(可能使用像Grape這樣的東西)。

現在你需要解決整個“這一切似乎阻止並且最終太慢”的問題。 我們已經刪除了Mongoid(因此不需要從JSON轉換 - > Ruby Objects - > JSON)和Rails。 在我們開始對這些數據進行MapReduce之前,您需要確保它足夠快地加載到數據庫中。 您可能需要構建整個事物,以便MapReduce支持您的報告功能。 對於數據的同步,除了傳遞JSON之外,您不需要做任何事情。 如果您的數據沒有足夠快地寫入數據庫,則應考慮對數據集進行分片 這可能是使用一些基於用戶的密鑰完成的,但您比我更了解您的數據模式。 您需要選擇分片密鑰,以便當多個用戶同時同步時,他們可能會使用不同的服務器。

解決問題1和2后,您需要處理報告。 Mongo中的MapReduce函數可能支持這一點。 我對這部分的第一個評論是確保你至少運行Mongo 2.0。 在那個版本中,10gen加速了MapReduce (我的測試表明它比1.8快得多)。 除此之外,您可以通過Sharding並將讀取定向到副本集中的輔助服務器(您正在使用副本集?)來實現進一步增加。 如果仍然無效,請考慮構建模式以支持您的報告功能。 這使您可以在客戶端上使用更多周期來執行工作,而不是加載服務器。 但是,在您證明傳統方法不起作用之后,應該保留這種優化。

我希望文本牆有所幫助。 祝好運!

暫無
暫無

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

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