如何在分布式数据库中管理用户会话?

时间:2017-06-02 12:02:16

标签: postgresql session database-design database-replication

由于我没有开发可以横向扩展的Web应用程序的经验,我需要有经验的人指导我正确的方向。

我很难找到在数据库中存储登录会话的正确方法,所以我提出的问题是,当我计划将来使用复制时,甚至可以将它们存储在数据库中吗?如果不是什么是替补?

我需要将不同的客户端(android,Windows,...)连接到服务器,并使用与同一用户相关的自己的会话,我正在使用:

1 - Cent-OS as OS

2 - PostgreSQL作为DBMS

3 - Tomee作为HTTP服务器和Servlet容器

4 - 分区表(PostgreSQL中的继承表)以提高性能,内存索引扫描的可能性,防止碎片等等

我的问题来自于我需要检查来自客户端的每个收到的请求中的会话可用性(每个会话都有自己的加密密钥),并且可能有数百万个会话,在分布式环境中我无法确定创建的会话将在适当的时间在复制数据库中可用。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

在RDBMS中存储用户会话将逐渐降低应用程序的性能。您应该查看分布式缓存机制来存储和读取用户会话。我强烈推荐NoSQL数据库解决方案用于Redis等用户会话,它使您可以在内存中存储键值对并以非常高的速度响应。此外,您可以调整配置文件,以便将内存中的键值对存储到磁盘以保持持久性。您还需要关注跨多个NoSQL实例和内部数据结构(如HashMaps)的键值对的分布。您可以使用自己的散列算法在多个实例上分配键值对,从而实现高可用性。您应该记住,横向分析数据会导致一些问题,您可以参考CAP theorem - Availability and Partition Tolerance详细信息。