【发布时间】:2016-04-14 19:42:49
【问题描述】:
情况
我正在尝试使用传统数据库实现仓库系统。
表格是:
- 产品(每行代表 1 个 sku)
- warehouse_locations(每一行代表特定仓库中的特定货架)
- 托盘(每行代表一个特定托盘)
- user_defined_categories(每一行代表一个特定的用户定义类别:例如 reserved、available、total_physical 等)
- products_in_pallets_by_categories(每一行都有pallets、products和user_defined_categories表的外键。将指定特定类别的特定托盘中的产品数量。)
- products_in_warehouse_locations_by_categories(每一行都有warehouse_locations、products表和user_defined_categories的外键。将指定特定类别的特定托盘中的产品数量。)
最终用户希望看到/做什么
最终用户将更新系统,了解哪些产品在哪个托盘上放置/移除。
最终用户还希望随时(最好实时)了解仓库中有多少保留或可用产品。
那么我最初的计划是什么?
希望使用 PostgresQL 等传统 RDBMS 和 RabbitMQ 等消息队列来提供实时更新。实时更新是指使用单页应用程序或手机的最终用户可以实时观察库存变化。
那么发生了什么变化?
I came across rethinkdb FAQ 它说
如果您需要完整的 ACID 支持或强大的功能,RethinkDB 不是一个好的选择 模式强制——在这种情况下,你最好使用关系 数据库,例如 MySQL 或 PostgreSQL。
你为什么还要考虑 rethinkdb?
因为如果我可以使用它并且它允许实时更新,它将非常有帮助,因为我们希望客户的销售团队在我们的系统上进行世界各地的预订。
最频繁的更新/插入是什么?
产品从一个地方到另一个地方的移动。我希望对关系表进行大量更新/插入/删除。偶尔,我很抱歉,我不知道如何在 rethinkdb 范式中解释这一点。我是一个传统的 RDBMS 人。
系统建好了吗?
还没有。这就是为什么我想在实际继续之前寻求有关 rethinkdb 的答案。
您希望使用任何交易吗?
嗯,我不确定。
我可以想象一个真实的案例,仓库工人将产品(部分或全部)从一个托盘移动到另一个托盘。
另一个现实世界的案例是仓库工人将产品从托盘移动到仓库位置(反之亦然)。
我一定要使用交易吗?同样,我不确定。
因为我希望工人在搬完搬家后更新系统。
我会提供一个屏幕供他们选择
- 从
<some dropdown>移动到<another dropdown>
那么问题是什么?
目前我是否需要根据我的用户要求为我的仓库系统提供完整的 ACID 支持或强大的架构实施?使用 rethinkdb 可以实现吗?
我还希望在系统实施后实施 activity streams,该系统将显示诸如工人 A 将 100 件产品 A 从仓库货架 1A 移动到托盘 25 等事件。
【问题讨论】:
-
关系数据库用于执行“大量更新/插入/删除”,这就是它们的用途。为什么你认为 Postgres 不能做到这一点?
-
嗨,Kim,虽然我认为这个问题更像是一个面向哲学/讨论的查询,但您绝对应该查看分布式系统专家 Aphyr 的这篇文章 => aphyr.com/posts/329-jepsen-rethinkdb-2-1-5。 RethinkDB 不会强调“最终一致”,使用正确的标志来进行
hard持久性和majority读取,您将使用 RethinkDB 获得相当一致(并且可靠验证)的设置。 -
感谢@dalanmiller 的链接你自己真的重新思考过吗?
标签: postgresql database-design rethinkdb