2010-11-05 54 views
8

我正在构建一个全功能的Web应用程序。当然,您可以在“离线”模式下保存到本地数据存储。我希望能够跨设备进行同步,以便人们可以在一台机器上工作,保存,然后在另一台机器上加载并加载它们的内容。Html5本地数据存储和跨设备同步

的问题是:

1)它是一个坏主意,在服务器上存储JSON?为什么在将服务器上的json解析为模型对象时,只要将它作为json传递回(其他)客户端?

2)我不知道我是否想为此尝试NoSql技术。我不打破JSON,现在数据库中唯一的关系是从用户帐户到他们的条目。除了用户数据之外,域模型将是一个String,它是json。忠告欢迎。

理论上,将来我可能想在服务器上做一些处理或者建立更复杂的关系。换句话说,现在我只想保存JSON,但是在将来我可能需要一个更传统的关系系统。 NoSQL的方法会妨碍这个吗?

3)有没有这方面的安全问题? JS注射例如?理论上,对于这个用例,用户至少现在不会输入任何内容。

预先感谢您。

编辑 - 感谢答案。我选择了我做的答案,因为它详细介绍了NoSql的优缺点。

+0

我不认为你需要大量的数据来考虑一个noSQL解决方案。我认为你应该根据它的功能选择适合这项工作的工具。在这种情况下,CouchDB可能是完美的,因为它是强大的复制和离线方法。 – rwilliams 2010-11-13 00:40:58

+0

@rwilliams - 是的,我同意。我的问题是:'nosql是否存储正确的技术'用于存储json。除其他问题外。 – hvgotcodes 2010-11-13 23:26:40

+0

JSON是CouchDB用来存储文档的格式,所以我会说这绝对是存储JSON的正确技术:P – rwilliams 2010-11-13 23:50:58

回答

3

JSON在服务器

这不是一个坏主意来存储JSON在服务器上,特别是如果你去一个NoSQL的解决方案类似的MongoDB或CouchDB的。两者都使用JSON作为它们的本地格式(MongoDB实际使用BSON,但它非常相似)。

NOSQL方法:假设的CouchDB如复制和并发处理存储引擎

  • 很简单REST API,跟与HTTP的数据的基础上。
  • 数据存储为原生JSON而不是斑点或文本字段
  • 强大的搜索/查询引擎,让你不断成长的文档
  • 离线模式的复杂性。您可以使用javascript直接与CouchDb交谈,并且如果互联网不可用,则整个应用程序将继续在客户端上运行。

安全

确保您解析用的browers JSON.parse或JavaScript库是安全的(json2.js)的JSON文件。

结论

我觉得跟NOSQL我建议的理由去这里,CouchDB的特别,就是它要处理所有的坚硬的东西给你。复制将很快成为安装。你不必担心并发性等。

这就是说,我不知道你在建什么样的App。我不知道你和客户的关系是什么,让他们把CouchDB放到他们的机器上会是多么容易。

链接

  1. CouchDB @ Apache
  2. CouchOne
  3. CouchDB the definitive guide
  4. MongoDB

更新:

看完应用后,我不认为CouchDB将会是一个很好的客户端选项,因为您不需要人们安装数据库引擎来播放soduku。这就是说,我仍然认为这将是一个很好的服务器端选项。如果您想将服务器CouchDb实例与客户端同步,您可以使用类似BrowserCouch这是CouchDB的本地存储的JavaScript实现。

+0

@rwilliams,假设数据存储为json,运行服务器端批处理作业来分析事情的过程是什么?你只是加载和解析,并继续前进?我打算使用html5 localstorage来保存客户端数据。除了couchdb,这将如何工作?它不是一个或另一个? – hvgotcodes 2010-11-14 14:46:36

+0

用CouchDB的视图引擎分析你要编写的地图或map/reduce函数。数据库中的所有文档在创建和更新时都会持续应用此功能。该函数使用您选择的键和值创建一个b-tree索引。 **除非你真的希望人们能够在线下玩游戏,否则我会说这可能是一个或另一个。如果您想使用CouchDB以外的本地数据,则可以使用BrowerCouch,然后将数据同步到服务器进行处理。我提到的关于earler的地图功能也可以在BrowserCouch中完成。 – rwilliams 2010-11-14 15:29:35

+0

@rwilliams,那么nosql方法的缺点呢?给一些权衡以获得更完整的答案。 – hvgotcodes 2010-11-14 15:40:04

3
  1. 如果大多数处理将在客户端使用JavaScript完成,但在将JSON直接存储在服务器上时看不到任何问题。

  2. 如果你只是想利用新技术,你很乐意尝试一些不同的东西,但是对于大多数应用程序来说,离开传统数据库并没有真正的理由,而SQL使生活变得简单。某些浏览器(Firefox 3.5以上版本,例如)已经有一个原生版本,而Crockford的json2.js可以复制别人这个功能 -

  3. ,所使用的标准JSON.parse函数来解析JSON字符串你是安全的,因为长。

+0

什么时候你想在点2使用nosql技术? – hvgotcodes 2010-11-08 20:41:35

+0

@hvgotcodes:当你有大量的数据,并且你实际上注意到一个传统的数据库正在影响你的性能。除非你是Google,否则这几乎不会发生。即使Facebook只使用MySQL数据库加上memcached来提高性能。 – casablanca 2010-11-08 20:47:47

+0

赏金结束前的任何更新,基于其他答案? – hvgotcodes 2010-11-14 14:44:31

2

刚刚看了你的帖子,我不得不说,我很喜欢你的方法,它预示着这样许多Web应用程序可能会在今后的工作中,既有本地存储的元素(断开状态)和在线存储(主数据库 - 将所有客户记录保存在一个地方并与其他客户端设备同步)。

这里是我的答案:

1)中存储JSON在服务器:我不知道我将存储的对象为JSON,它可以这样做,如果你的应用程序是非常简单的,然而,这将妨碍使用这些数据的努力(例如运行报告并通过电子邮件发送给批处理作业)。我宁愿使用JSON来传输我自己的信息以及用于存储它的SQL数据库。

2)NoSQL方法:我想你已经在那里回答了你自己的问题。我的首选方法是现在设置一个SQL数据库(如果所需的额外资源不是问题),那么您可以为自己设置NoSQL的数据访问层节省一些工作,因为您可能必须将其删除在将来。如果你不想要一个全功能的RDBMS,SQLite是一个不错的选择。

如果编写一个模式太麻烦了,而您仍然希望将JSON保存在服务器上,那么您可以使用单个表格散列JSON对象管理系统,并在服务器端解析某个JSON对象以返回相关记录。这样做会比保存/删除文件更容易,所需的权限也更小。

3)安全性:你提到有目前没有用户输入:

“用于该用途的情况下,用户并不 获得进入任何事情”

但在问题刚开始的时候你也提到用户可以在一台机器上工作,保存,然后得到

另一台机器上,如果是这样的话,那么你的申请将被存储用户数据加载其 东西”

,没关系,你还没有提供一个很好的图形界面为他们这样做,你会不得不担心多个角度的安全问题,而且类似的工具只能解决一半的问题(客户端)。

基本上,您还必须检查服务器上的POST请求的内容,以确定要发送的数据是否有效且真实。在保存到数据存储之前,需要在服务器上(使用php或其他类似语言)验证JSON对象的完整性(或者您要绑定的任何数据),这是因为有人可以轻松绕过您的javascript层“安全性”并篡改POST请求,即使您不打算这样做,然后您的应用程序将无论如何将恶意输入发送出客户端。

如果你已经整理了服务器端的东西,那么JSON.parse在防止JS注入方面会变得有点过时。如果您依赖远程网站API来获取一些数据,那么还有额外的一层也不错。

希望这对你有用。

+0

赏金结束前的任何更新,基于其他答案? – hvgotcodes 2010-11-14 14:45:14

+0

@hvgotcodes,我更新了安全部分 – 2010-11-14 15:38:30

+0

@ hvgotcodes,也提出了使用简单的RDBMS解决方案和1个用于存储JSON的表。 – 2010-11-14 17:17:33