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