2014-02-11 44 views
0

我正在開發使用節點JS,套接字IO和JSON文件的實時聊天應用程序。我正在使用JSON文件來讀取和寫入聊天數據。現在我遇到了一個問題,當我進行壓力測試時,即將連續消息推送到JSON文件中時,JSON格式變得無效,並且我的應用程序崩潰了。儘管我使用的forever.js應該保持應用程序正常運行,但應用程序仍然崩潰。 有沒有人有這個想法? 在此先感謝您的幫助。使用節點JS套接字IO和JSON文件的在線聊天應用程序

+0

爲什麼你首先使用文件? – Blender

+0

因爲我不想用DB來保存記錄。其次,讀/寫從文件變得更快。 – user2763827

+0

鍵值存儲或關係數據庫仍將比磁盤IO更快。測試一下。 – Blender

回答

0

強烈建議您重新考慮將數據保存到磁盤的方法。

除此之外,其中一個很大的問題是您可能會遇到數據丟失。如果我們都在同一時間獲得文件 - {"foo":"bar"} - 我們都做出了改變,並將它保存在我的面前,我的改變會覆蓋你的文件,因爲我開始時的操作與你一樣。儘管您已將它保存在我之前,但在保存後我沒有重新打開它。

你現在可能看到的僅僅是追加的方法是,我們都在不考慮有效的JSON結構(IE:{"fo"bao":r":"ba"for"o"}{"foo":"bar"} x 2)中添加零星和零件。

磁盤I/O其實很慢。即使使用SSD硬盤。記憶是它的位置。

按照建議,您可能要考慮MongoDB,MySQL或其他。對於Couchbase,這可能是一個不錯的使用案例,它是基於內存緩存的內存鍵/值存儲區,可將內容持久保存到磁盤。它非常適合JSON(它實際上主要基於JSON),爲查詢數據提供了很好的映射/減少支持,非常容易擴展到多個服務器,並且具有node.js module

這將允許您非常輕鬆地將現有數據存儲例程遷移到數據庫中。此外,它還提供了CAS支持,可以防止您在前面概述的情況下丟失數據。

儘管如此,您應該修改一個內存對象,以便經常保存到磁盤以防止永久數據丟失。但是,這隻適用於1臺服務器,然後您可能需要查看數據庫。

相關問題