0

我最初在其他地方发布了这个。

概要:

读取包含几位信息的日志文件。我正在使用时间戳(四舍五入到分钟)和一个 id 来构建我的密钥。(1348495218081lID1)。我在每次放置之前都会进行查找,以便查看数据库中是否存在具有相同键的记录。如果命中,我会在返回的记录上增加一个计数器字段,然后对该记录执行 put。但是,我在数据库中看不到任何计数器值大于 1 的记录。我应该有很多这样的记录。

这是一个例子:

            UserNameCountRecord countRecordLookup = new UserNameCountRecord();
            countRecordLookup.setStartDate(1348495218081l);
            countRecordLookup.setUserName(ID1);
            countRecordLookup.buildId();
            // getId() will return "1348495218081lID1"
            userNameCountRecord = findUserNameCountById(countRecordLookup.getId());
            if (userNameCountRecord != null) {
                userNameCountRecord.incrementCount();
                entityManager.put(userNameCountRecord, false);
            } else {
                userNameCountRecord = new UserNameCountRecord();
                userNameCountRecord.setStartDate(wibEntry.getStartDate());
                userNameCountRecord.setUserName(wibEntry.getUserName());
                userNameCountRecord.setCount(1);
                if (wibEntry.isKnownUserId()) {
                    userNameCountRecord.setKnownUserName(true);
                } else {
                    userNameCountRecord.setKnownUserName(false);
                }
                userNameCountRecord.buildId();
                entityManager.put(userNameCountRecord);
            }
            entityManager.flush();

任何帮助将不胜感激。感谢您所做的所有出色工作!

干杯

4

2 回答 2

0

嗯,如果您使用的是 playorm,那么您使用的是 cassandra,这句话让我有点害怕......

“我在每次放置之前都会进行查找,以便查看数据库中是否存在具有相同键的记录。”

如果您有两台服务器,那么两者都可能会进行查找并看到密钥不存在,然后继续使用相同的密钥并发生冲突。通常,您最好生成 TimeUUID 或使用 playOrm UniqueKeyGenerator.generateKey (playOrm 在自动生成 ID 时为您执行此操作)。来自 playorm 的 id 保证在您的集群中是唯一的(与 TimeUUID 相比也很好而且很短)。

无论如何,您可能想重新考虑一下,好像您的 clsuter 扩展了您可能会遇到问题,尽管我不知道您的其余设计或上下文。

院长

于 2012-12-31T17:14:47.473 回答
0

我是个白痴。为此表示歉意。我的增量器方法不起作用。

于 2012-12-31T16:30:16.427 回答