Html5本地数据存储区,并跨设备同步

时间:2010-11-05 14:45:54

标签: sql json html5 nosql rich-internet-application

我正在构建一个功能齐全的Web应用程序。当然,您可以在处于“离线”模式时保存到本地数据存储区。我希望能够跨设备同步,这样人们就可以在一台机器上工作,保存,然后再上另一台机器并加载它们的东西。

问题是:

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

2)我不确定我是否想尝试使用NoSql技术。我没有打破json,因为现在数据库中唯一的关系是从用户帐户到他们的条目。除了用户数据之外,域模型将是一个String,它是json。建议欢迎。

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

3)这有什么安全问题吗?以JS注入为例?从理论上讲,对于这个用例,用户至少现在无法输入任何内容。

提前谢谢。

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

3 个答案:

答案 0 :(得分:3)

  1. 如果您的大部分处理都是在客户端使用JavaScript完成的,我认为直接在服务器上存储JSON没有任何问题。

  2. 如果您只想玩新技术,欢迎您尝试不同的东西,但对于大多数应用程序来说,没有真正的理由偏离传统数据库,而SQL使生活变得简单

  3. 只要您使用标准JSON.parse函数来解析JSON字符串,您就是安全的 - 某些浏览器(例如Firefox 3.5及更高版本)已经具有本机版本,而Crockford的{{3可以在其他人中复制此功能。

答案 1 :(得分:3)

服务器上的JSON

将JSON存储在服务器上并不是一个坏主意,特别是如果你使用像MongoDB或CouchDB这样的noSQL解决方案。两者都使用JSON作为其原生格式(MongoDB实际上使用BSON,但它非常相似)。

noSQL方法:假设CouchDB为存储引擎

  • 烘焙复制和并发处理
  • 非常简单的Rest API,使用HTTP与数据库通信。
  • 将数据本地存储为JSON,而不是存储在blob或文本字段中
  • 强大的查看/查询引擎,可让您继续增加文档的复杂性
  • 离线模式。您可以使用javascript直接与CouchDb交谈,如果互联网不可用,整个应用程序将继续在客户端上运行。

安全

确保使用浏览器JSON.parse或安全的Javascript库(json2.js)解析JSON文档。

<强>结论

我认为我建议在这里使用noSQL的原因,特别是CouchDB,是因为它将为你处理所有困难的东西。复制将很容易进行设置。您不必担心并发等问题。

那就是说,我不知道你正在建造什么样的应用程序。我不知道你们与客户的关系是什么,以及让他们将CouchDB放在他们的机器上是多么容易。

<强>链接

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

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

答案 2 :(得分:2)

只是阅读你的帖子,我不得不说我非常喜欢你的方法,它预示着许多Web应用程序将来可能会运行的方式,包括本地存储元素(用于断开状态)和在线存储(主存储)数据库 - 将所有客户记录保存在一个位置并与其他客户端设备同步。)

以下是我的答案:

1)在服务器上存储JSON:我不确定是否会将对象存储为JSON,如果您的应用程序非常简单,可能会这样做,但这会妨碍使用数据(例如,在批处理作业上运行报告和通过电子邮件发送)。我更喜欢使用JSON自行传输信息,使用SQL数据库存储信息。

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

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

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

  

“对于这个用例,用户没有   得到任何东西“

然而,在问题的开头你还提到用户可以

  

“在一台机器上工作,保存,然后获取   在另一台机器上加载他们的   东西“

如果是这种情况,那么你的应用程序将存储用户数据,你没有提供一个很好的GUI来做这件事并不重要,你将不得不担心多个角度的安全性{{{ 1}}或类似工具只能解决问题的一半(客户端)。

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

如果你在服务器方面整理了一些东西,那么JSON.parse在防止JS注入方面就变得有点过时了。如果您依靠远程网站API获取一些数据,那么获得额外的图层仍然不错。

希望这对你有用。