如何处理跨多个数据库的数据分割?

时间:2017-02-27 22:30:29

标签: django database

我正在整理一份关于开发Web应用程序的提案。

该应用程序将在多个国家/地区推出,并且一些客户的合作伙伴和(据称;我不是律师)某些相关国家/地区都有关于个人数据存储位置的规则。结果是有一个硬性要求,即某些国家/地区用户的特定数据存储在该国家/地区的服务器上。 (听起来他们可以在任何国家/地区缓存数据了 - 但是我打算在主数据中心安装一个Redis内存存储库。)有些数据(例如信用卡详细信息)将会另外要加密,但这似乎对它们的存储位置没有任何影响。

根据当前的要求,来自一个国家/地区的用户实际上不会与来自其他国家/地区的用户进行交互,因此一个明显的选择是在每个国家/地区运行不同的应用程序实例,完全独立。从架构的角度来看,这更简单,但更难管理,并且整体服务器成本会更高。如果客户希望报告所有国家/地区的所有用户,或者最终他们想要合并数据库,并且用户的主键必须更改,则可能会变得复杂。并非不可能,但这可能是一种痛苦。

可能更好的是拥有一个中央数据库,其中包含客户认为可以在一个地点(北美某处)托管的所有信息,然后每个国家的卫星数据库保存客户需要保存的信息。家”。

因此主数据库将拥有主用户表,仅包含PK和国家/地区代码,并且还有许多其他表。每个本地数据库都有一个“用户详细信息”表,带有外键(主数据库上的主用户表)和一堆其他个人身份信息列,以及用户名,电子邮件地址,密码等。

然后,客户可以推送其他数据存储在卫星位置,其中一些可能是用户一对多,也可能是用户多对多。

我的问题:

  • 如何使用Django处理这个问题?它可以,还是我应该看看其他框架?
  • 是否可以编辑内置用户模型,以便在登录时查找所有卫星数据库中的匹配用户模型,并在登录时从这些数据库中检索用户数据而不会有太多麻烦?
  • 您是否有任何指导方针可以让我确保代码保持简单并保持高效?
  • 如果卫星数据库与主用户表只有一对一的数据,这会非常容易吗?我想在那些卫星数据库中拥有一对多或多对多的数据会是一个主要的痛苦(或者至少效率低下),或者我错了吗?

1 个答案:

答案 0 :(得分:0)

相应地回答你的问题:

  1. 看起来你可以在Django做的事情(我喜欢Django所以我可能不是最好的意见) - 也许以下内容会说服你(或不)。
    微服务方法? "用户"的多个实例资源多服务每个都有它自己的数据库(我听说过成本,但也许?)。

  2. 您可以使用Django身份验证后端(including wirting your own)做很多事情 - 有一个"远程"您可以使用auth后端作为示例。阅读有关无状态身份验证(JWT)。

  3. 请看第1点和第2点。

  4. 考虑not using the built-in Django user model它是否适合您。