草庐IT

php - 在 PHP/MySQL CMS 中实现订单并处理并发

coder 2023-10-18 原文

我有以下表格:

=======================           =======================
| galleries           |           | images              |
|---------------------|           |---------------------|
| PK | gallery_id     |<--\       | PK | image_id       |
|    | name           |    \      |    | title          |
|    | description    |     \     |    | description    |
|    | max_images     |      \    |    | filename       |
=======================       \-->| FK | gallery_id     |
                                  =======================

我需要实现一种方法,将与图库关联的图像按特定顺序排序。据我了解,关系数据库不是为分层排序而设计的。

我还希望为并发的可能性做好准备,尽管它极不可能成为我当前项目中的一个问题,因为它是一个单用户应用程序。 (因此,这里的首要任务是允许用户重新排列顺序)。

我不确定解决此问题的最佳方法,因为我从未在数据库中实现过排序,而且我对并发不熟悉。因此,我阅读了有关锁定 MySQL 表的内容,但不确定在这种情况下我是否应该实现它。

这是我的两个想法:

  1. 将名为 order_num 的列添加到 images 表。锁定表并允许客户端重新排列图像的顺序,然后更新表并将其解锁。

  2. 将名为order_num 的列添加到images 表(与上面的想法1 相同)。允许客户端在不锁定的情况下一次更新一个图像的位置。

谢谢!

最佳答案

这是我的想法:您不想在不太可能发生的问题上投入太多的工时。因此,采取不会引起很多副作用的简单解决方案,如果出现问题,稍后再修复。

在基于网络的世界中,您不希望锁定表格供用户进行编辑,然后等到他们完成后才解锁表格。在这种情况下,用户 1 可能永远不会回来,他们可能会丢失 session ,或者他们的浏览器可能会崩溃等。这意味着您必须做很多工作来确定何时解锁表,以及让用户 2 知道的代码该表已锁定,他们无法对其进行任何操作。

我建议改用这种设计:让他们都进入编辑模式,可能是在他们的浏览器中,使用一些 javascript。他们可以按顺序拖动图像直到他们满意为止,然后他们提交完整的订单。您将单个事务中的 order_num 字段更新到数据库。

在这种情况下,最糟糕的情况是用户 1 和用户 2 同时编辑,最后编辑的人的顺序将被保留。也许它们会同时更新,但数据库会处理它,因为它将对事务进行排队。

这个问题的后备方案是,无论谁的订单被覆盖,都必须重做。很烦人但没有损失,实现它的代码比处理锁定的代码简单。

我不想回避你的问题,但这就是我的想法。

关于php - 在 PHP/MySQL CMS 中实现订单并处理并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099184/

有关php - 在 PHP/MySQL CMS 中实现订单并处理并发的更多相关文章

  1. ruby - 在 Ruby 中实现 `call_user_func_array` - 2

    我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)

  2. ruby-on-rails - 如何在 Ruby on Rails 中实现无向图? - 2

    我需要在RubyonRails中实现无向图G=(V,E)并考虑构建一个Vertex和一个Edge模型,其中Vertex有_多条边。由于边恰好连接两个顶点,您将如何在Rails中执行此操作?您是否知道任何有助于实现此类图表的gem或库(对重新发明轮子不感兴趣;-))? 最佳答案 不知道有任何现有库在ActiveRecord之上提供图形逻辑。您可能必须实现自己的Vertex、EdgeActiveRecord支持的模型(请参阅Rails安装的rails/activerecord中的vertex.rb和edge.rb/test/fixtur

  3. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

  4. ruby-on-rails - 获取并发布相同匹配项的请求 - 2

    在我的路线文件中我有:match'graphs/(:id(/:action))'=>'graphs#(:action)'如果是GET请求(工作)或POST请求(不工作),我想匹配它我知道我可以使用以下方法在资源中声明POST请求:post'/'=>:show,:on=>:member但是我怎样才能为比赛做到这一点呢?谢谢。 最佳答案 如果你同时想要POST和GETmatch'graphs/(:id(/:action))'=>'graphs#(:action)',:via=>[:get,:post]编辑默认值可以设置如下match'g

  5. ruby - 在 Ruby 中实现 to_int 和 to_str 的后果 - 2

    我haveaclass它公开了一个字符串值和一个int值(分别是命令输出和退出代码)。除了通过to_s和to_i公开它们之外,我还使用to_str和to_int,如下所示:classStatusdefto_s@outputendalias:to_str:to_sdefto_i@status.exitstatusendalias:to_int:to_iend我的想法是能够在尽可能多的情况下使用这个对象。将其强制转换为字符串或整数会增加可用性。例如,我可以将对象与字符串连接起来:a_string="Outputwas:"+results(我想用这个作为int强制转换的例子,但是Fixnum

  6. ruby - 在 Ruby 中实现二叉树 - 2

    我一直在尝试在Ruby中实现BinaryTree类,但我得到了stackleveltoodeep错误,尽管我似乎没有在该特定代码段中使用任何递归:1.classBinaryTree2.includeEnumerable3.4.attr_accessor:value5.6.definitialize(value=nil)7.@value=value8.@left=BinaryTree.new#stackleveltoodeephere9.@right=BinaryTree.new#andhere10.end11.12.defempty?13.(self.value==nil)?true:

  7. ruby-on-rails - 2个用户之间的产品订单 - 2

    我有三个模型:User、Product、Offer以及这些模型之间的关系问题。场景:用户1发布了一个产品用户2可以向用户1发送报价,例如10美元用户1可以接受或拒绝提议我现在的问题是:用户、产品和报价之间的正确关系是什么?我如何处理那些“接受或拒绝”操作?是否有更好的解决方案?用户模型:classUser:productsend产品型号:classProduct:usersend提供模型:classOffer提前致谢:)编辑:我正在使用Rails3.2.8 最佳答案 警告:小小说来了第1部分:设置关联我建议阅读Railsguideo

  8. ruby - 如何在 Ruby 中实现私有(private)内部类 - 2

    来自Java,我正在尝试在Ruby中实现LinkedList。我在Java中实现它的通常方法是有一个名为LinkedList的类和一个名为Node的私有(private)内部类,其中LinkedList的每个对象都作为Node对象。classLinkedListprivateclassNodeattr_accessor:val,:nextendend我不想将Node类暴露给外部世界。然而,通过Ruby中的这个设置,我可以使用这个访问LinkedList类之外的私有(private)Node类对象-node=LinkedList::Node.new我知道,在Ruby1.9中,我们可以使用

  9. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  10. ruby - 在 Ruby 中实现 Luhn 算法 - 2

    我一直在尝试用Ruby实现Luhn算法。我一直在执行以下步骤:该公式根据其包含的校验位验证数字,该校验位通常附加到部分帐号以生成完整帐号。此帐号必须通过以下测试:从最右边的校验位开始向左移动,每第二个数字的值加倍。将乘积的数字(例如,10=1+0=1、14=1+4=5)与原始数字的未加倍数字相加。如果总模10等于0(如果总和以零结尾),则根据Luhn公式该数字有效;否则无效。http://en.wikipedia.org/wiki/Luhn_algorithm这是我想出的:defvalidCreditCard(cardNumber)sum=0nums=cardNumber.to_s.s

随机推荐