问题标签 [system-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1284 浏览

assembly - PC 相对地址和绝对地址之间的区别

我想知道是否有人可以解释重定位 PC 相对引用和重定位绝对引用之间的过程中的差异/相似之处。

我目前上的课程是一门严格用 C 语言教授的系统设计课程,所以我不确定为什么这与课程相关。

0 投票
3 回答
844 浏览

data-structures - 为什么队列/FIFO 排序在消息队列中很重要?

消息传递提供者的一个选项是消息队列,它提供 FIFO 排序,即队列。为什么消息的顺序很重要?我想知道是不是因为消息的优先级或类似的原因。如果有人能举例说明,我将不胜感激。

0 投票
1 回答
1418 浏览

sql - 如何设计任务分配系统?

我想设计一个类似于 stackoverflow审查功能的系统。也就是说:

有些n任务应该分配给用户(用户数未知)。一次,一项任务最多分配给一个用户,不同的用户不应分配相同的任务。

例如,n = 8,如果一个用户进入系统默认分配给他 3 个任务。

  • 17:00,Tom进入系统,拿到任务1、2、3。
  • 17:01,Jim 进入系统,得到任务 4、5、6。
  • 17:02,Jerry进入系统,得到任务7、8。
  • 17:03,Bob 进入系统,没有得到任何任务。
  • 17:05,Tom完成任务1、2,离开系统。
  • 17:06,Bob 再次进入系统,得到任务 3。

假设我使用数据库来存储任务信息。

我的解决方案是,当任务 1、2、3 分配给 Tom 时,从 DB 中删除 3 条记录并将它们存储到内存中。那么其他人将不会获得这 3 条记录。当 Tom 离开系统时,将他已完成的任务和未完成的任务再次插入 DB(任务状态为“已完成”或“未完成”)。

虽然缺点是存储记录到内存不是 100% 安全的,但如果系统崩溃可能会导致数据丢失问题。

有人知道stackoverflow是如何设计审查功能的吗?或者分享其他解决方案?我想知道SELECT ... FOR UPDATE在这个用例中是否很好。

0 投票
3 回答
4781 浏览

oracle - oracle中如何将值传递给存储过程?

我已经编写了一个存储过程,我试图在其中插入和更新值。我在执行插入时担心(它包含 5 个参数和不同的数据类型)有不同的值,并且在更新时(它包含 6 个参数和不同的数据类型)有不同的值。我想对这两种情况使用单个存储过程(插入/更新)。如何管理参数?

步骤

0 投票
2 回答
1535 浏览

domain-driven-design - CQRS 聚合

我是 CQRS/ES 世界的新手,我有一个问题。我正在开发一个使用事件溯源和 CQRS 的发票 Web 应用程序。

我的问题是——据我了解,进入系统的新命令(比如说 ChangeLineItemPrice)应该通过域模型,以便可以将其验证为合法命令(例如,要检查此行项目是否实际存在,价格不违反任何商业规则等)。如果一切顺利(命令未被拒绝) - 则创建并存储相应的事件(例如 LineItemPriceChanged)

我不太明白的是,在尝试应用命令之前,我如何将这个聚合保存在内存中。如果系统中有一百万张发票,是否应该在每次应用命令时回放整个历史记录?我是否总是在没有任何验证的情况下保存事件并在构建视图模型/投影时进行验证?

如果我误解了该过程的任何部分,我将不胜感激您的反馈。

谢谢你的帮助!

0 投票
1 回答
282 浏览

domain-driven-design - CQRS/ES 非规范化器

我正在开发一个使用事件溯源和 CQRS 的发票 Web 应用程序。

我有 2 个用于不同查询的反规范化器(一个用于发票摘要列表,一个用于包含完整详细信息的单个发票)。我觉得很奇怪,我需要为这 2 个非规范化器复制很多逻辑——例如,监听改变总计、小计、税收等的事件。

我最终在消息总线上传递了包含真实计算数据的聚合本身,而不仅仅是事件,并且让非规范化器而不是事件来监听它。

这对我来说更简单,但似乎与模式不同。我读过的任何文章都没有提到这种方法。

我喜欢只在总线上传递事件并让每个非规范化器对它需要的东西做出反应的想法,但在实践中感觉更麻烦。

我很想听听你的想法。

谢谢你的帮助!

0 投票
1 回答
2065 浏览

java - 如何在 Clean Architecture 中实现一对多关系

我在使用 Clean Architecture 时遇到问题。对于那些阅读过 Fernando Cejas 的博客文章 http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/的人,我的问题是基于它和他的代码。

他的示例项目只有一个域对象一个用户。使用 POJO 一切都很清楚。我遇到的问题是,假设用户有书。一对多的关系。你会如何在 Clean Architecture 中处理这个问题?

就像他一样,我有几层,所以每个域对象有 3 个类(用户、用户模型、用户实体),每个域对象有一个存储库(用户数据存储库)。我们的新示例还将包含 Book、BookModel、BookEntity 和 BookDataRepository。

我也有带有 CRUD 变体的用例类。

对我来说,问题出在 UI/Presenter 级别。在程序的这一点上,我有一个 UserModel 对象和一个 BookModels 列表。我没有 userModel.getBooks()。我没有 userModel.save() (这也将保存所有书籍更改)。

为了突出这个问题,为了让这个类比看起来更像我的实际用例,我还有书中所有页面的列表!:) 所以当我保存用户时,我想保存到书籍,以及每本书可能已修改的所有页面。

我该怎么办?

第二个奖励问题:在我的现实世界问题中,我有派生自基类的类。使用上面的类比:LeftPage 和 RightPage 将派生自 PageBase。一本书有一个列表。但是 LeftPage 和 RightPage 都有各自的存储库、单独的用例等。(但这不起作用)如何保存列表?我是否必须制作一个单独的用例 SavePages ,该用例将具有:

if (pages.elementAt(i) instanceof LeftPage) { SaveLeftPage saveLeft = new..... } else { SaveRightPage saveRight = new..... }

我不认为我可以使用多态,因为在我看到的所有文档中,模型都不知道用例。

我希望你能帮忙,非常感谢你的时间:)

-麦克风

0 投票
0 回答
118 浏览

activemq - Activemq Artemis 中面向消息队列的设计

我在集群容错系统上设计面向消息队列的设计时遇到问题。

有三个站点 AB C.

B被聚类为B1 B2 B3。

C被聚类为C1 C2 C3。

一条消息 X(实际上是每秒 1000-5000 Xs)从站点 A 发送到 B 集群。

B 将其转换为 Y 并将其发送给 C。

C 将其转换为 Z 并将其发送给 B。

如果 A 和 B 之间的连接失败,A 将 X 发送给 C。现在 C 将其转换为 Z 并将 Z 发送给 B。

如果 A 的所有连接都失败,则 A 将 Xs 存储在本地。

我看过 Apache Activemq Artemis,以前是 Jboss HornetQ。

但我无法完全弄清楚它是否满足我的上述情况。

你可以帮帮我吗?感谢您的回答。

0 投票
1 回答
72 浏览

design-patterns - 视图控制器内的网络编程......不好的做法?

相当广泛的问题,我知道。

在模型之外的视图控制器中保持网络是不好的做法吗?或者这在模型中会更受欢迎吗?例如,目前有一个 ViewController,我通过它获取 JSON 数据。一个 URL 请求,对其进行解析,并将其呈现给视图。

我将 JSON 结果的数据用作数据模型对象中的属性。不好的做法?

我现在专门使用iOS,但对我来说一切都好,我只是想理解。

0 投票
2 回答
55 浏览

security - 通过不安全的传输边界验证消息来源

我正在构建一个由 3 个部分组成的系统。系统A,系统B,系统C。

系统 A 不能直接与系统 C 对话,需要经过系统 B。系统 B 可能包含许多系统 C。这里还有一个问题是系统 B 有可能创建自己的副本/克隆并将其包含在自身之下(​​作为系统 C)。

我想从系统 A 向所有系统 C 广播消息。系统 B 包含它封装的所有系统 C 的列表。我想在系统 C 中添加逻辑,其中只有来自系统 A 的消息被认为是有效的(因此标记为安全的以供进一步处理)。

作为第一次切割,我正在考虑通过 diffie-hellman 算法协商一个私钥。但意识到系统 B 可以创建自己的副本,将其作为系统 C 的实例包含在内并获得私钥。是否有更好/标准的方法来做到这一点,以便可以在系统 C 端验证源的真实性?