我需要一个java应用程序来管理数据库,以将工作单元分配给客户端。 实际上,它是一个网格应用程序:数据库充满了客户端的输入参数,并且它的所有元组都必须分发给请求的客户端。客户端发送结果后,服务器相应地修改数据库(例如标记计算的元组)。
现在让我们假设我有一个充满元组的数据库(SQLite或MySQL),并且客户端请求一组输入元组:我希望一组工作单元专门发送给一个唯一的客户端,所以我需要将其标记为“已经被另一个客户请求”。 如果我查询数据库的第一个(例如5)查询,同时另一个客户端提出相同的请求(在多线程服务器体系结构中,并没有任何同步),我认为有可能两个客户端接收相同的工作 - 单位。如何创建向客户端分发工作单元的服务器?
我想象的解决方案可能是:
1)让一个单线程的服务器架构(的ServerSocket.accept()再次调用以前的客户端请求已送达后,才,使服务器仅有效访问客户端)
2)在多线程架构中,使查询和元组锁操作同步,以便我获得一种原子性(有效地对数据库进行序列化操作)
3)使用原子查询操作到数据库服务器(或文件,在SQLite的情况下),但在这种情况下,我需要帮助,因为我不知道事情真的如何...
但是我希望你能理解我的问题:它与seti @ home非常相似,分配它的工作单元,但是所有分布式单元与其众多客户端的交集都是空的(理论上)。 我的非功能性需求是语言是java,而数据库是SQLite或MySQL。