使用 OneDrive 或 Dropbox 作为数据库
Using OneDrive or Dropbox as a database
首先,这不是任何 of these questions 的重复,后者讨论了使用单个 Dropbox 帐户作为多用户应用程序的后端
我已经构建了一些应用程序,主要是在 Windows Phone 和 Windows Store 上,还有更多正在开发中。
我经常发现自己想要为这些应用程序添加数据同步,在设备之间但为同一用户。我的应用程序通常是免费的或非常便宜,而且我无力为数据库托管服务器花钱。我确实有一个付费托管帐户,其中有一些我可以使用的有限数据库 space,但是在(不太可能)我的一个应用程序取得巨大成功的情况下,我突然陷入了一大笔托管账单。在那种情况下,我不得不突然开始向用户收取以前免费的应用程序的经常性费用,或者更糟的是,已经付费。
我不断回到使用 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 扫描文件夹,发现项目已重命名(或删除)并将其从本地数据库中删除
我发现这种方法的明显问题是
- 项目限制在 255 - 9 个字符(9 个为 xYYYYMMDD 保留),除非你想下载每个文件,这会很慢
- 没有锁定
除了这两个问题,我在实施这样的系统时还有其他问题吗?
PS:我也考虑过用本地副本覆盖存储的 SQLite 文件,但我认为这对于移动设备来说数据开销太大
更新
我已经接受了 Peter Nied 下面的回答,它指出了我在使用这样的系统时可能遇到的问题,回答了我的问题。然而,Smarx 在评论中指出 Dropbox 有一个免费的数据存储 API,我可以将其用于我的应用程序。与尝试在文件系统之上实现我自己的数据存储相比,这似乎是一个更好的解决方案,所以我打算这样做。
更新 2
数据存储 API 在我更新 post 仅 3 个月后就被弃用了,因此它不再可用。幸运的是,那时我还没有开始针对它进行开发。您可以非常轻松地将 Dropbox 用作标准的平面文件存储,但如果您想进行任何类型的同步,则必须自己动手
更新 3
2021 年 6 月
我确实构建了类似于“Jobbie”的东西供个人使用,但我最终使用 Dropbox API 将数据存储在文本文件中,类似于 Todo.TXT 的工作方式。
我在 Android (VueJs / Cordova) 上的移动应用程序将我的内容更改同步到 Dropbox,然后在任何笔记本电脑上,我可以在任何文本编辑器中打开 txt 文件,并在需要时进行更改。它非常适合我的用例。
一两次我在启用了自动保存的编辑器中打开了文本文件(Mac 上的一些降价编辑器)并且当最新版本被旧副本覆盖时我丢失了数据,但是使用 Dropbox 修订历史很容易恢复数据。
如果您正在构建一个轻量级应用程序,并且需要以低廉的价格在设备之间同步简单数据,这很有效。
虽然 OneDrive 和 DropBox 有办法存储文件信息并确保与 Etags/Ctags 的某种程度的一致性,但在这些基于文件的系统之上构建将很难提供数据分区、事务和冲突管理。这会很酷,但我怀疑它是否便宜(时间方面)或没有错误。
使用已经构建的服务来为您提供数据存储功能将是您最好的选择。有许许多多的服务可以让您通过数据库访问您的信息存储。例如 Microsoft 的 Azure 产品线、Amazon 的 AWS 和许多其他专注于跨多个平台保持数据同步的产品。
首先,这不是任何 of these questions 的重复,后者讨论了使用单个 Dropbox 帐户作为多用户应用程序的后端
我已经构建了一些应用程序,主要是在 Windows Phone 和 Windows Store 上,还有更多正在开发中。
我经常发现自己想要为这些应用程序添加数据同步,在设备之间但为同一用户。我的应用程序通常是免费的或非常便宜,而且我无力为数据库托管服务器花钱。我确实有一个付费托管帐户,其中有一些我可以使用的有限数据库 space,但是在(不太可能)我的一个应用程序取得巨大成功的情况下,我突然陷入了一大笔托管账单。在那种情况下,我不得不突然开始向用户收取以前免费的应用程序的经常性费用,或者更糟的是,已经付费。
我不断回到使用 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 扫描文件夹,发现项目已重命名(或删除)并将其从本地数据库中删除
我发现这种方法的明显问题是
- 项目限制在 255 - 9 个字符(9 个为 xYYYYMMDD 保留),除非你想下载每个文件,这会很慢
- 没有锁定
除了这两个问题,我在实施这样的系统时还有其他问题吗?
PS:我也考虑过用本地副本覆盖存储的 SQLite 文件,但我认为这对于移动设备来说数据开销太大
更新
我已经接受了 Peter Nied 下面的回答,它指出了我在使用这样的系统时可能遇到的问题,回答了我的问题。然而,Smarx 在评论中指出 Dropbox 有一个免费的数据存储 API,我可以将其用于我的应用程序。与尝试在文件系统之上实现我自己的数据存储相比,这似乎是一个更好的解决方案,所以我打算这样做。
更新 2
数据存储 API 在我更新 post 仅 3 个月后就被弃用了,因此它不再可用。幸运的是,那时我还没有开始针对它进行开发。您可以非常轻松地将 Dropbox 用作标准的平面文件存储,但如果您想进行任何类型的同步,则必须自己动手
更新 3
2021 年 6 月
我确实构建了类似于“Jobbie”的东西供个人使用,但我最终使用 Dropbox API 将数据存储在文本文件中,类似于 Todo.TXT 的工作方式。
我在 Android (VueJs / Cordova) 上的移动应用程序将我的内容更改同步到 Dropbox,然后在任何笔记本电脑上,我可以在任何文本编辑器中打开 txt 文件,并在需要时进行更改。它非常适合我的用例。
一两次我在启用了自动保存的编辑器中打开了文本文件(Mac 上的一些降价编辑器)并且当最新版本被旧副本覆盖时我丢失了数据,但是使用 Dropbox 修订历史很容易恢复数据。
如果您正在构建一个轻量级应用程序,并且需要以低廉的价格在设备之间同步简单数据,这很有效。
虽然 OneDrive 和 DropBox 有办法存储文件信息并确保与 Etags/Ctags 的某种程度的一致性,但在这些基于文件的系统之上构建将很难提供数据分区、事务和冲突管理。这会很酷,但我怀疑它是否便宜(时间方面)或没有错误。
使用已经构建的服务来为您提供数据存储功能将是您最好的选择。有许许多多的服务可以让您通过数据库访问您的信息存储。例如 Microsoft 的 Azure 产品线、Amazon 的 AWS 和许多其他专注于跨多个平台保持数据同步的产品。