问题标签 [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.
concurrency - 多个进程同时读取大二进制文件的不同部分
我有一个大的二进制文件,它保存在 NFS 共享磁盘上。在集群中,我希望多个进程同时读取这个大文件。每个进程获取一个文件指针,打开大文件并从提供的指针开始读取并读取一些字节大小。
我如何设计这个项目?就我而言,它类似于一些并发数据库。是否有与我的项目相关的轻量级库或开源项目?我使用C++
语言。
c# - 替换文本中的动态值
我正在实现一个 SQL 警报系统来监控我们的一些数据。
该警报系统基本上调用一个存储过程,该过程根据返回的输出错误代码触发警报。
例子:
@ErrorCode = -100 ==>触发警报
@ErrorCode = 0 ==>什么都不做
现在,当触发警报时,它会进入数据库并获取用户和应该发送给他们的消息。
要发送的消息包含一些应该根据触发该警报的存储过程从数据库中获取的数据。前任:
*消息1:
亲爱的用户
%ServiceName%的内容 将以%NbrOfDays%天结束。*
*消息2:
亲爱的用户
今天的订阅者数量是%NbrOFSubscribers%*
如您所见,每条消息所需的数据都是动态的,并且取决于触发警报的存储过程。
应该使用什么来从存储过程中获取数据并将它们替换为消息中的动态值(%ServiceName%、%NbrOfDays%、%NbrOFSubscribers%)
我的想法之一是将它们作为 XML 输出参数返回。如下所示并替换它们。
database - 系统设计:多个数据库客户端或代理和更少的数据库连接
假设我有一个系统,其中大约 1000 台机器将从传感器生成数据,他们必须将数据发送到中央系统,然后将数据存储在 SQL 表中。
我的问题是,如果让每个系统直接连接到数据库并插入(这是唯一需要的操作)数据,或者使用像 ie 这样的消息传递服务器将其发送到服务器,是否会更好。HornetQ,并且有一个(或几个)软件实例使用来自 HornetQ 的数据并将其写入数据库系统?
我想知道这两种方法在 CPU/内存成本和可扩展性方面的比较,特别是在系统的服务器端(即,设计用于处理大量客户端的数据库系统)。
python - Python 系统设计。主从?还是多个大师?
最初它是一个小项目,只有 150 个帐户,我在 python 中编写了一个 selenium 程序来与他们一起做一个小任务。它使用一台计算机,大约需要 5 个小时。但是,现在我希望扩展到 1000 个帐户。出于明显的原因,我不想在一台计算机上执行此操作,此任务需要每天完成一次,显然在一台计算机上完成此任务大约需要 30-35 小时。我想使用多台机器,但也想选择轻松扩展到三台、四台或更多。
我已将所有帐户的数据移至亚马逊云数据库,并且可以从我的 python 程序轻松连接到它。但是,正如我之前提到的,我希望这个项目易于扩展。我不想硬编码值,也就是让一台计算机执行帐户 1-500,另一台执行 501-1000(如果我添加 500 个帐户和 2 台机器怎么办?我希望每台机器执行 1500/4)。我正在考虑一种主从方法。在每台机器上,我都有一个程序,可以将一些帐户作为数组调用。还有一个在我的机器上运行的主程序,每 24 小时可以发送一个命令,其中包含每台机器应该使用的帐户。
然后我希望程序将数据返回给我,当每个从站完成时,主程序将合并每个从站发回的数据并相应地更新表。或每个从站独立更新表,但我不确定这是否可能由于表锁(如果有人可以对此发表评论,这也会有所帮助)
谢谢阅读!
编辑:如果您认为这太宽泛了,我不是在寻找确切的答案。只是想找到以前做过类似事情的人。仅列出一项我可以研究的技术或方法将对我有很大帮助
algorithm - 如何使用多台机器扩展算法/服务/系统?
我最近接受了一些采访,被问到一些规模问题是很正常的。例如,您有一个很长的单词列表(dict)和字符列表作为输入,设计一个算法来找出 dict 中包含字符列表中所有字符的最短单词。然后面试官问如何将你的算法扩展到多台机器上。另一个例子是您为城市的一个十字路口设计了一个交通灯控制系统。您如何将此控制系统扩展到具有许多交叉路口的整个城市。我一直对这种“规模”问题一无所知,欢迎提出建议和意见。
architecture - 如何设计系统以支持像谷歌文档一样同时读/写?
这是谷歌面试中提出的系统设计问题。面试官想设计一个系统来支持google doc。它允许多人同时编辑文档,并且具有在本地机器上编辑它的良好经验。
c++ - 随机文件写入
如果我有多个线程生成文件块,写出块的最佳方法是什么?
ex) 5 个线程处理 500 个块的文件,块 0 不一定在块 1 之前完成,但磁盘上的输出文件需要按顺序排列。(块 0,块 1,块 2,......块 499)
该程序是 C++ 中的,fwrite() 可以以某种方式“随机访问”文件吗?该文件是从头开始创建的,这意味着当块 5 完成时,由于块 1~4 尚未完成,文件可能仍为 0 大小。我可以直接写出第5块吗?(使用适当的 fseek)
这段代码对性能至关重要,所以我真的很好奇任何可以提高性能的东西。这看起来像一个多生产者(块生成器)和一个消费者(输出写入器)场景。想法案例是线程A在完成前一个块时可以继续生成下一个块。
如果 fwrite 可以是“随机的”,那么输出写入器可以简单地获取输出,查找,然后写入。但是不确定这种设计是否可以大规模执行。
一些限制
- 每个块大小相同,在内存中生成
- 块大小是预先知道的,但不是块的总数。
- 总大小为几 GB。大的。
- 一台服务器上可能运行多个作业。每个工作都在上面进行了描述。他们有自己独立的生成器/编写器,不同的进程。
- 服务器是 Linux/CentOS 机器。
database - 管理员角色的数据库设计
我正在设计一个应用程序,它的用户可以编写不同的帖子(文本、文件图像等)。为了使这些帖子对其他用户可见,应该有一个管理员来验证帖子的内容是否正确,并授予发布帖子的权限。我正在使用关系数据库。设计数据库以支持此功能的最佳方法是什么?
php - 如何设计一个高效的Like系统?
我正在尝试为网站的现有评论部分创建类似于 Facebook 的 Like/Unlike 系统,我需要帮助设计系统。
目前,网站上的每个产品都有评论区,会员可以发表评论和点赞。我需要知道每个成员发表了多少评论,他的每条评论获得了多少赞。当然,出于分析目的,我还需要知道谁也喜欢哪些评论(部分原因是为了防止用户多次喜欢评论)。
对当前评论模块实现 Like 系统的简单方法是在数据库中创建一个新表,该表具有 CommentID 和 UserID 的外键。然后,对于用户给评论的每一个“赞”,我都会在这个新表中插入一行,其中包含目标评论 ID 和用户 ID。
虽然这可能会奏效,但大量的评论和用户将导致该表快速增长,从这个巨大的表中检索记录和进行计数将变得缓慢且效率低下。我可以索引任一列,但我不知道它的效果如何。该网站有超过一百万条评论。
我正在使用 PHP 和 MySQL。对于这样一个拥有庞大数据库的系统,我应该如何设计一个 Like 系统,使其更加优化和稳定?
javascript - 需要重型客户端系统设计和架构设计理念和答案/提示
我希望可以在这里发布这个。我想知道是否有人可以分享示例系统设计和架构面试问题/想法,特别是在客户端/Web 重点和一些服务器参与方面。(就像刽子手的服务器只存储高分并提供当前的猜测词)我有一个面试即将到来,因为它是一个全栈软件工程师卷,每个 3、45 分钟的系统设计和架构问题将被问到设计一个具有大量客户端组件的应用程序,并查看客户端/服务器关系。
此外,您可以分享有关如何处理它/它在白板上的外观的任何信息都会很棒。我很乐意绘制出更密集的服务器设计,但我对如何绘制客户端架构/系统有点困惑。
谢谢!