0

私はもともとこれを別の場所に投稿しました。

あらすじ:

いくつかの情報を含むログ ファイルを読み取ります。タイムスタンプ (分単位で切り捨て) と ID を使用してキーを作成しています。(1348495218081lID1)。各プットの前にルックアップを行うので、同じキーを持つレコードが DB に存在するかどうかを確認します。ヒットした場合は、返されたレコードのカウンター フィールドをインクリメントし、そのレコードにプットを実行します。ただし、カウンター値が 1 より大きい DB 内のレコードは見当たりません。かなりの数のレコードがあるはずです。

次に例を示します。

            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

私はアホです。これにつきましては申し訳ございません。インクリメンタ メソッドが機能していませんでした。

于 2012-12-31T16:30:16.427 に答える
0

ええと、playorm を使用している場合は、cassandra を使用しているため、このステートメントは少し怖いです...

「各 put の前にルックアップを行うので、同じキーを持つレコードが DB に存在するかどうかを確認します。」

2 つのサーバーがある場合、両方がルックアップを実行し、キーが存在しないことを確認し、同じキーの使用に進み、競合が発生する可能性があります。通常、TimeUUID を生成するか、playOrm UniqueKeyGenerator.generateKey を使用することをお勧めします (これは、自動 ID 生成で playorm が行います)。playorm からの ID は、クラスター内で一意であることが保証されています (また、TimeUUID に比べて短くて適切です)。

とにかく、クラスターが拡大した場合に問題が発生する可能性があることを再考することをお勧めしますが、残りの設計やコンテキストはわかりません。

ディーン

于 2012-12-31T17:14:47.473 に答える