2014-04-21 102 views
0

我正在研究一個WhatApp稍微熟悉的項目,除了我沒有實現聊天功能。我應該選擇哪個數據庫? MySQL或mongoDB?

我需要在數據庫中存儲的唯一事情是用戶的信息,這將不會是非常大的,而且我也需要在移動應用程序,它應該與服務器數據庫進行同步離線數據庫。

當前我使用MySQL作爲我的服務器數據庫,並且我正在考慮使用JSON在移動應用程序和服務器之間進行同步,然後我發現mongoDB對JSON有自然的支持,這讓我想知道應該改變到mongoDB。

因此,這裏是我的問題:

  1. 我應該改變到MongoDB的,或者我應該還在使用MySQL?每個用戶的數據不會太大,並且對數據一致性有一定要求。但mongoDB的JSON支持有點吸引力。

  2. 我不熟悉的同步過程中,我做了一些挖掘和似乎JSON是一個不錯的選擇,但什麼數據我應該投入JSON文件?

+0

另一種選擇是MariaDB。 –

+0

mysql是關係數據庫,mongodb不是,所以你必須考慮這個。如果你只是想在數據庫中存儲json對象,我認爲你最好使用mongo – d1mitar

+0

@ d1mitar謝謝,但我不會將json對象存儲在數據庫中,我只使用json進行同步過程。 – fish748

回答

0

我實際上將此標記爲過於寬泛,並且主要吸引以意見爲基礎的答案,但我會毫無疑問地將其付諸實踐,並希望保持客觀。

首先你在這裏有兩個單獨的問題。

  1. 我應該使用什麼數據庫系統。
  2. 如何在應用程序和服務器之間進行同步。

第一個是容易回答,因爲它並不重要。兩者都是存儲數據的好選擇。 MySQL是成熟和穩定的,而MongoDB雖然較新,但有很好的評論,但我不知道會阻止它被使用的任何已知問題。因此,採取您發現容易使用的數據庫。

現在對於第二,我會首先把在多個實體之間的數據同步整本書都寫一個聲明,它是這一切的時候還是博士的主題之後。

我會建議對移動應用程序和數據庫之間的直接同步,因爲需要將包含在應用中的數據庫憑據。移動應用程序可以進行反編譯並提取證書,這會危及整個數據庫的安全。所以你可能會想創建一些API,首先進行設備/用戶認證,然後更改數據庫。

這已經意味着使用MongoDB的爲這個份上可能是一個壞主意。

現在,JSON本身就是一種表示具有某種結構的數據的格式,就像XML一樣。因此,它不是一種同步而是運輸的方法。

爲了同步數據,重要的是要知道真相的來源。 如果你有1 device <-> 1 record這很容易,因爲設備將成爲事實的根源,畢竟發生的唯一突變大概是由用戶在設備上完成的。

如果你有n devices <-> 1 record那麼它會變得更加惱人。如果您希望允許設備在脫機時更改狀態,則需要在設備恢復聯機時執行一些技巧來同步數據。但這可能是一個太複雜的問題,需要依靠情況來回答。

但是,如果您強制設備始終立即將更改傳播到數據庫,那麼數據庫將始終包含最新的記錄或事實。缺點是應用程序的一部分在離線時無法使用。

如果脫機更新不會更改狀態,而只是添加新記錄,則可以在聯機時將這些記錄推送到服務器。但請記住,您將無法訂購這些活動。

+0

那麼設備是「新」項目的真實來源。而服務器是「其他」設備的真相來源。你可以簡單地從'1設備 - >服務器 - > n設備'推他們沒有問題。 – EWit

+0

感謝您的回答。對於同步部分,我檢查了我的設計,結果發現大多數同步模式是** 1設備<-> 1條記錄 - > n設備**,它有點像SNS:我更改了我的配置文件,然後修改同步到服務器,以及我所有鏈接的朋友。現在,我想我會繼續使用MySQL,直到發現一些重大問題,並且我認爲我對於同步過程有一點了解。再次感謝您的回答,它有很大的幫助。 – fish748

+0

我認爲**服務器 - >其他設備的**部分是非常清楚的,但是,我可以在應用程序和服務器(通過網頁,也許)進行修改,然後我應該使用時間戳或其他東西進行比較應用程序和服務器之間的數據是否正確? – fish748

相關問題