我应该为每个数据库表使用单独的通量存储吗?

Posted

技术标签:

【中文标题】我应该为每个数据库表使用单独的通量存储吗?【英文标题】:Should I use separate Flux store for each DB table? 【发布时间】:2015-12-10 21:05:42 【问题描述】:

我正在创建一个将用户数据存储在多个数据库表中的应用程序 - 信息、付款和预订(这是一个预订系统)。 在“信息”表中,我存储用户信息,例如电子邮件、姓名、电话等......, 在“付款”表中,我存储了他的付款详细信息,在“预订”中,我存储了他的预订历史记录。

我的问题是 - 在 Flux 架构中表示这些数据的最佳方式是什么?我需要 3 个不同的存储(每个表)还是单个存储(比如说“UserStore”)来保存所有用户的数据?

基本上,我有一个仪表板组件应该显示所有用户的数据。

如果我应该使用 3 个不同的存储解决方案,是否有可能知道它们何时都完成了数据加载(因为每个存储都从数据库异步加载数据)?...

谢谢!

【问题讨论】:

借助 Reflux,您可以将多个商店合并为一个。这样组件就只有一个商店要处理。如果数据获取速度足够快,您可以串行获取。否则,您必须在商店中创建关于获取状态的状态。 【参考方案1】:

一般来说,商店越少越好(更容易维护)。 我使用的经验法则:如果一家商店的代码行数超过 300 行,那么您应该考虑分拆到不同的商店。 在这两种解决方案(一个商店或 3 个商店)中,您都需要代码来管理表之间的依赖关系。代码只是存在于不同的文件/存储中。

关于您提到的用户仪表板:避免在您的商店中存储冗余数据。所以如果你有例如用户的预订总数,创建一个实时计算的 getter 函数。

最好不要让存储直接从数据库或服务器端加载数据,而是创建一个 WebAPIUtil,当新数据进入时触发更新操作。参见“官方”通量图。 商店可以有一个 waitFor 函数,等待另一个商店更新。

【讨论】:

以上是关于我应该为每个数据库表使用单独的通量存储吗?的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery:数据集中的大量表会影响性能吗?

我可以在redshift的存储过程中有表变量吗?

您是不是应该在 JPA 中的每个表都有一个存储库?

如何在asp.net mvc中使用单独的表管理两种用户?

DB2 删除表后如何释放相应磁盘空间

我应该在多个表中包含 user_id 吗?