我读过很多这方面的讨论,比如PUT是幂等的而POST不是等等。但是,这最终不取决于服务器是如何实现的吗?开发人员始终可以构建后端服务器,使 PUT 请求不是幂等的,并为多个请求创建多个记录。开发人员还可以为 PUT 请求构建端点,使其充当 DELETE 请求并删除数据库中的记录。
所以我的问题是,考虑到我们不考虑任何服务器端代码,HTTP 方法之间是否有任何真正的区别?例如,GET 和 POST 的真正区别在于您无法使用 GET 请求发送正文,但可以使用 POST 请求发送正文。另外,据我了解,大多数浏览器中通常会默认缓存 GET 请求。
HTTP 请求方法是否不仅仅是一种逻辑结构(语义),以便作为开发人员我们可以根据我们发送的 HTTP 请求类型“预期”某种行为?
我的理解是Kafka在分区级别有顺序保证。我的问题是 - 如果您的应用程序有多个消费者同时运行并从同一分区读取数据,那么分区中的顺序是否重要?毕竟,您的应用程序不会无序地处理它吗?
例如,假设我按照各自的顺序 M1、M2、M3 向单个分区 P1 生成了 3 条消息。
M1:
{"userId": 1, "favourite_food": "chicken"}
Run Code Online (Sandbox Code Playgroud)
M2:
{"userId": 1, "favourite_food": "beef"}
Run Code Online (Sandbox Code Playgroud)
M3:
{"userId": 1, "favourite_food": "fish"}
Run Code Online (Sandbox Code Playgroud)
假设我在同一个消费者组中有3个消费者C1、C2、C3。这些消费者的应用逻辑是将数据(在消息正文中发送)保存到数据库中(基本上我们希望将用户最喜欢的食物保存在数据库中)。
现在,由于消息在分区本身内排序,C1 在时间 读取 M1 t,C2 在时间 读取 M2 t+1,C3 在时间 读取 M3 t+2。但是,由于我们在某种程度上并行读取消息,因此消费者将数据保存到数据库中的顺序可能是无序的。例如,假设 C1 在一台非常慢的计算机上运行,并且仅在时间 写入数据库t+10。t+5然而,C2 和 C3 运行在速度更快的计算机上,并且它们分别按时写入数据库t+6。从应用程序的角度来看,用户最喜欢的食物现在是“鸡”,尽管它实际上应该是“鱼”,因为“鱼”是“最新”消息。
我的问题是 - 我们如何保证应用程序级别的排序?即使我们可以做到这一点,如果我们无论如何都必须在应用程序级别处理排序,那么为什么 Kafka 的“分区内排序”很重要呢?
不确定我是否误会了什么......
根据我自己的研究,我了解单个数据库(非分布式)上的 SQL 连接算法背后的基本思想 - 例如。散列连接、合并连接、循环连接。分布式连接算法是否类似于非分布式数据库上的连接算法?
例如,如果我有一个具有以下属性的用户表: - User_id - Age
我有一个带有属性的 Comments 表: - User_id - Comment_id - Comment
假设分布式数据库使用User_id对Users表进行分片,使用Comment_id对Comments表进行分片。
那么当您调用 SQL 查询时实际发生了什么:
SELECT * FROM Users INNER JOIN Comments ON Users.User_id = Comments.User_id
Run Code Online (Sandbox Code Playgroud)
? 是否将 User 表和 Comment 表整理到一台机器上,然后执行 JOIN?或者,即使它是分布式的,您是否也可以通过某种方式进行 JOIN?