1

我有以下学生课程。

public class Student implements Serializable {

    private int contestantId;
    private String email;
    private String password;
    private String firstName;
    private String lastName;
    private String contact;
    private String country;
    private String countryCode;
    private String school;

    ...
    A couple more properties as well as getters and setters...
    ...
}

我的业务逻辑要求电子邮件和联系号码是唯一的。在传统 RDMS 的情况下,我可以通过将列设置为UNIQUE并处理出现的任何约束异常来轻松完成此操作。

由于我们的托管环境(OpenShift 不扩展数据库),我想将我现有的应用程序从直接在 PostgreSQL 中存储数据转换为使用 Infinispan 的分布式数据网格。但是,我现在遇到的主要问题是我无法弄清楚如何对UNIQUE电子邮件和联系人执行约束。

我的问题是否有解决方法,或者我是否必须得出结论,Infinispan 不适合我的特定要求?

4

1 回答 1

2

数据网格可以提供令人印象深刻的可扩展性功能,因为每个条目都是严格独立的。因此,考虑“唯一”验证甚至没有意义,但是可以通过重新表述问题来选择。

  • 您可以使用一个缓存来存储通过电子邮件键入的学生数据,并使用第二个缓存使用联系人号码的键。在创建新条目之前,请确认它不存在。或者,您可以将这两个操作包装在一个事务中,或者使用putIfAbsent操作。在一个缓存中您存储数据,在第二个缓存中您可以存储一个副本(如果有用的话)或只是一个标记令牌,或者另一个缓存的密钥,以便轻松地从不同属性中找到学生。

  • 您可以使用索引,因此您可以通过电子邮件/联系人/等搜索学生。

  • 你可以使用一个组合。我可能会在尝试插入之前使用索引进行检查,因此我可以灵活地访问任何字段,并且不需要复制数据或进行太不寻常的映射,但是在插入时我仍然会使用带有putIfAbsent操作的事务以确保并发线程不会尝试同时创建同一个学生。

于 2013-08-13T22:02:36.043 回答