物品/记录重新订购?

时间:2013-08-20 10:30:15

标签: c# javascript asp.net-mvc database performance

假设在多用户应用程序上同一个请求可能同时由多个用户发起,这些请求最终将是某些服务器端操作的ajax调用,我们有一个例程执行服务器上的操作/方法如下:

例行任务:它负责进行重新排序,以便想象项目彼此没有连接,没有双重链表清单数据结构,但是所有项目都默认为假定排序并通过以下方式表示给用户:该订单,当添加项目,删除项目或更新项目操作由这些ajax调用启动时,排序将不同,因为该条目类似于FIFO。

目前我需要更新所有记录,orderNumber列以跟踪所有已更改的内容,在更新操作上,因为项目在用户界面中是可移动的,并且用户具有拖放交互的功能,项目可以上升或者在原始有序列表中删除并更改这些排序。

您认为最有效的方法是跟踪这些排序更改,这些方法在服务器上的性能成本最低,并为用户保持可接受的用户交互?

开发平台是ASP.NET MVC4,使用SQL Server的持久性

编辑:

在阅读完第一个答案之后,我必须提一下这样一个事实:问题不是从服务器为所有用户发出的实时或多播消息,或者是由一个用户发起的更改发出的广泛消息所有其他用户。 项目是用户特定的,一些用户可能有数百个项目,有些用户可能少或少

1 个答案:

答案 0 :(得分:0)

我肯定会看SignalR(或任何等效的技术,但因为你在.net堆栈中,感觉更自然)。

在SignalR中,您可以创建集线器,跟踪连接到该集线器的客户端,甚至可以创建用户组。您可以从服务器端(通过抓取集线器上下文)或从任何客户端向该集线器发送消息。

如果你有N个用户连接,每个拖放操作导致重新排序屏幕中的元素将导致从用户发出的消息发出重新命令,让其他客户知道订单已经改变。收到此类“orderChanged”消息的用户可以向服务器发出ajax调用以获取最新消息。

编辑:

即使它不是多播,如下面第一条评论中所阐明的那样,SignalR也是一个不错的选择。 在您的集线器中,您可以跟踪用户连接(复数,因为单个用户可以从不同的客户端登录),并根据更改的内容单独发送消息。

当主管更改用户的ToDo列表时,您可以在受影响的用户正在使用的客户端上调用方法,因此他知道他的列表已更改。

使用相同的概念,如果他更改了自己的ToDo列表,您可以将消息发送给同一用户的其他客户端。

SignalR 非常灵活,只要你看一下这些文档就会很清楚。