使用OneDrive或Dropbox作为数据库

14
首先,这不是任何一个问题的重复,其中 一些 讨论 使用单个Dropbox账户作为多用户应用程序的后端。
我已经构建了一些应用程序,主要是在Windows Phone和Windows Store上,并且还有更多的计划。
我经常发现自己希望将数据同步到这些应用程序中,在设备之间但是对于同一用户。我的应用程序通常是免费或非常便宜的,我负担不起为数据库托管服务器支付费用。我确实拥有一个付费托管帐户,其中包含一些有限的DB空间可以使用,但是如果我的某个应用程序成为热门应用(可能性不大),我突然面临着巨额的托管费用。在那种情况下,我必须突然开始向以前免费的应用程序用户收取重复的金额,或者更糟糕的是,已经支付过的金额。
我一直想到使用OneDrive、Dropbox或其他免费云托管作为数据库的想法。以下是我如何看待它的工作方式。

假设我们有一个名为Jobbie的待办事项应用程序

  • 用户在两台设备上安装Jobbie
  • 用户在两台设备上登录OneDrive,在其OneDrive文件夹中创建一个"jobbie"同步文件夹
  • 在设备A上,用户创建一个新的待办事项"取回干洗物"
  • 设备A上传一个名为"20153001-pick_up_dry_cleaning.item"的文本文件到OneDrive。
  • 设备B扫描文件夹,找到一个新文件,并将其添加到本地数据库中
  • 在设备B上,用户将"取回干洗物"标记为"已完成",文件将被重命名为"x20153001-pick_up_dry_cleaning.item"(或删除)
  • 设备A扫描文件夹,看到该项目已被重命名(或删除),并从本地数据库中删除它

我认为这种方法显然存在以下问题:

  1. 每个条目的字符限制为255-9个字符(9个为xYYYYMMDD保留),除非您想下载每个文件,否则速度会很慢
  2. 没有锁定机制
除了这两个问题,我在实现这样一个系统时还会遇到其他问题吗?
PS:我也考虑过用本地副本覆盖存储的SQLite文件,但我认为这对移动设备来说是太多的数据开销。
更新:
我接受了下面Peter Nied的答案,他指出了我可能遇到的问题,回答了我的问题。然而,Smarx在评论中指出Dropbox有一个免费的数据存储API可以用于我的应用程序。这似乎比在文件系统上实现自己的数据存储要好得多,所以我选择使用它。
更新2:
数据存储API在我更新帖子后仅三个月就已被弃用,因此不再可用。幸运的是,在那时我还没有开始对其进行开发。您可以很容易地将Dropbox用作标准的平面文件存储,但如果要进行任何类型的同步,则必须自行处理。
更新3: 2021年6月 我构建了类似于“Jobbie”的东西供个人使用,但最终我使用Dropbox API将数据存储在文本文件中,类似于Todo.TXT的工作方式。
我的Android移动应用程序(VueJs / Cordova)将我的内容更改同步到Dropbox,然后在任何笔记本电脑上,我都可以使用任何文本编辑器打开txt文件并进行更改(如果需要的话)。这对于我的使用情况非常有效。
有一两次,我在启用自动保存的编辑器中打开了文本文件(Mac上的某些Markdown编辑器),当最新版本被旧副本覆盖时,我丢失了数据,但是使用Dropbox修订历史记录很容易恢复数据。
如果您正在构建轻量级应用程序并需要在便宜的设备之间同步简单数据,则此方法适用。

1
其实现在我想起来,如果您使用2位数的年份格式,您只需要7个字符就足够了。这至少可以在接下来的100年内工作。 - roryok
1
我猜你还没听说过Dropbox的Datastore API. :-) https://www.dropbox.com/developers/datastore 特别是,看一下Lists示例应用程序: https://www.dropbox.com/developers/blog/108/new-lists-sample-app。 - user94559
1
@Michael,我所说的Dropbox集成将在用户自己的Dropbox帐户上进行,而不是在中央帐户上。 - roryok
如果这个应用程序变得流行起来,每个人都可以拥有自己的Dropbox并管理自己的待办事项清单。Jobbie不需要被设计成跨连接世界上的每一个待办事项清单,它可以是一个个人应用程序,具备个人Dropbox作为数据库的功能。我并不是说这在任何特定的应用中都是最好的选择,但我发现这整个想法(经过修改)很有启发性,并且在许多情况下值得考虑。 - DavidWalley
Dropbox数据存储API已被弃用。 - Private
显示剩余6条评论
2个回答

2

虽然OneDrive和DropBox有存储文件信息并确保使用Etag/Ctag的一定程度的一致性的方式,但在这些基于文件的系统上构建将难以提供数据分区、事务和冲突管理。这很酷,但我怀疑它既不便宜(时间方面),也不会没有错误。

使用已经构建好的服务来提供数据存储功能是您最好的选择。有无数的服务可以为您提供对信息存储的数据库访问权限,例如Microsoft的Azure产品线、亚马逊的AWS和许多专门在多个平台之间保持数据同步的其他服务。


6
我之前提到我无法负担Azure或AWS的费用。这是一个规模的问题。应用程序是免费的,因此数据存储必须是免费的才能提供服务。话虽如此,你的回答确实涵盖了我在问题中提出的内容,所以我接受了它。 - roryok

0

我对实现类似的东西很感兴趣。虽然我还没有实现任何实质性的东西,但我认为最好的解决方案应该允许DropBox/OneDrive/Box/SyncThing等同步文件夹。

顺便说一下,MoneyDance是Quicken的替代品,提供了非常成功的同步功能。

我认为使用一个一致的、只写的同步文件夹不仅可以永久备份数据,而且还可以作为“主”副本永久存在。


我认为提供SMB共享作为同步选项对于企业用户来说是一个很好的选择。注意:有一些GitHub项目用于一致的平面文件数据库...抱歉,我目前手头没有链接。 - CodeMonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接