如何在高性能javaweb服务应用程序中共享公共数据结构



我正在开发两个web服务,一个用于购买产品,另一个用于验证产品。多个客户端将调用BUY(约250/sec),VALIDATE也是如此。在调用后端之前,他们需要查询和更新表格数据结构。

我有一种感觉,使用像Oracle这样的关系数据库表来维护这种通用数据结构会因为网络延迟而减慢速度(假设数据库和查询得到了最佳调整)。有人建议我使用EhCache和Hazelcast,但我更喜欢使用数据库表,因为我更了解它。

有人能确认,对于一个每秒处理250-300个事务的应用程序来说,通过网络访问数据库是否会成为瓶颈吗

当然,如果服务器实例发生故障,并且我们丢失了数据结构的内存表示,那么我们是可以的。

这实际上取决于您的应用程序在做什么
当然,您可以使用具有昂贵硬件和昂贵网络硬件的数据库机器
问题是,这真的需要吗
正如一些评论中所说的那样,如果您主要执行READ(读取请求多于写入请求),缓存将对您有很大帮助。为了优化,您应该考虑索引(例如,如果您存储addressed,您可以考虑通过"ip"字段进行索引,假设大多数不是通过ID的查询都是通过该字段进行索引),
这只是正确的数据库模式规划的一部分(这方面的其他方面可能是通过尽可能正确地建模数据来避免表之间的复杂连接),甚至可能是NoSQL数据库
伸缩性如何?如果要进行缓存和伸缩,则应该使用分布式缓存/分布式数据结构
例如,infinispan可以在这里提供帮助
您还可以通过使用内存中/进程中(即,它的代码位于jar中,并共同托管在应用程序的JVM上)(如h2)来提高性能,这可以进一步减少查询时间。但再一次,这确实取决于您的具体用例,不幸的是,您描述的内容过于笼统

IMO,缓存将在更新请求低于查询请求时提供帮助。。。假设您将缓存作为一个大映射,如果您每次更新服务器上的行时都需要更新,那么它将存储已查询的值,并且您通过使其条目无效来更新缓存,以便再次执行对DB的请求。

最新更新