可以在我的数据库上一个一个地提交请求吗?或按数组提交

Is it okay to submit one by one request on my database? or submit whole by array

我正在创建问卷网络应用程序,

我想知道是将用户的每个答案一个一个地提交到我的数据库中更好(这意味着更多的请求),还是我只是将每个答案存储在一个数组中,当问题已经完成时,那就是到时候我会整体提交,这样就只有一个请求了。

的软件复杂性、性能和 ACID 含义是什么

这有什么区别吗?

对我来说,这取决于最后请求的大小和用户行为。 考虑第一个选项,如果他在结束前离开,至少你已经存储了第一个问题。如果它对您的分析有任何价值,您可以这样做。 如果你在最后发送一个请求,对我来说这也是一种解决方案,那么请注意它的大小。但是如果用户之前离开,你就会丢失信息。

tl;dr 使用事务。

我猜你想知道这是否...

INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,1,"yes");
INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,2,"no");

比这更好或更差...

INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,1,"yes"),
              (111,222,2,"no");

我建议第二个选项。为什么?

  • 这是一个 so-called atomic operation carried out in an implicit transaction。也就是说,这一切都是同时发生的,如果由于某种原因失败了,那么一切都会失败。 (这个atomic有“不可分割”的意思,不是“核能”的意思。)
  • MySQL 服务器的工作稍微少一些,因为事务需要工作;您的第一个选项(在我的示例中)有两个隐式交易,第二个选项只有一个。

但是,必须要说的是,编程第二个选项对你来说更麻烦,特别是如果你参数化你的 INSERT 查询(mysqli, PDO) to avoid SQL injection。你应该避免它。因为 cybercreeps。

这里有一个很好的中间路径,可以让您获得第一个选择的编程简单性优势和第二个选择的原子性和性能优势。

START TRANSACTION;
INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,1,"yes");
INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,2,"no");
COMMIT;