2012-12-31 22 views
0

我原本是在其他地方发布的。ID更新Cassandra

简介:

读取日志文件与信息的若干位。我使用时间戳(舍入到分钟)和一个id来构建我的密钥。 (1348495218081lID1)。我在每次放置之前查看一下,看看DB中是否存在具有相同键的记录。如果我受到了打击,我会在返回的记录上增加一个计数器字段,然后对该记录进行放置。但是,我没有看到DB中的任何记录的计数器值大于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(); 

任何帮助将不胜感激。感谢您一直在做的所有工作!

干杯

回答

0

我是个白痴。为此事道歉。我的增量器方法不起作用。

0

嗯,如果你正在使用playorm,您使用的卡珊德拉及本声明恐吓我有点...

“我一抬头之前,每把这么看,如果使用相同的密钥记录存在在DB中。“

如果您有两台服务器,则两者都可能执行查找并查看密钥不存在,然后继续使用相同的密钥并发生冲突。通常情况下,您最好生成TimeUUID或使用PlayOrm UniqueKeyGenerator.generateKey(该代码可为您自动生成ID)。来自playorm的ID保证在您的群集中是唯一的(与TimeUUID相比,它的优点和缺点)。

无论如何,你可能想重新思考,就好像你的clsuter扩展你可能会遇到的问题,尽管我不知道你的设计的其余部分和上下文。

院长