如何在高性能Java Web服务应用程序中共享通用数据结构

时间:2012-07-13 17:33:33

标签: java database web-services shared-memory

我正在开发一些Web服务 - 一个用于购买产品,另一个用于验证产品。多个客户端将调用BUY(大约250 /秒)和VALIDATE相同。 他们需要在调用后端之前查询和更新表格数据结构。

我觉得使用像Oracle这样的关系数据库表来维护这种常见的数据结构会因为网络延迟而减慢速度(假设数据库和查询被优化调整)。我已经提出过EhCache和Hazelcast,但我更喜欢使用数据库表,因为我知道它更好。

任何人都可以确认,通过网络访问数据库是否会成为每秒250-300次交易的应用程序的瓶颈?

当然,如果服务器实例出现故障并且我们丢失了数据结构的内存中表示,我们也没关系。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

IMO,如果更新请求低于查询请求,缓存将有所帮助...假设您将缓存为一个大型地图,如果您每次更新服务器上的行时都需要更新,则会存储已查询的值,并通过使其条目无效来更新缓存,以便再次对DB执行请求。