MapDB で何かをしようとしていて、壁にぶつかりました。できる限り説明してみます:
4 つのデータがあります。次のようになります。
1) String action; //the name of the action itself
2) String categoryOfAction; //the category of the action
3) Integer personWhoPerformedAction; //the person that did the action
4) Long timeOfOccurrence; //the time the action was done
このデータベースでは、さまざまな人がさまざまな時間に同じアクションを複数回、さまざまなカテゴリで実行できます。3 つの個別のマップが必要で、それぞれがデータを次のように整理します。
String[] actionOccurances = map1.get(action); //returns every occurrence of that action (possibly in an array), including who did that occurrence, time the occurrence occurred, and the category of that occurrence
Long latestOccurance = map2.get(action); //returns the latest occurrence of that action
String[] actionsPerformedByPerson = map3.get(personWhoPerformedAction); //returns every action that this person has done, including the category of that action, the time they performed that action, and the name of the action itself
ですから、これをできるだけ効率的に行いたいのです。私は次のようなことができることを知っています:
DB thedb = DBMaker.newTempFileDB().make();
NavigableSet<Object[]> map1 = thedb.createTreeSet("actionOccurences").comparator(Fun.COMPARABLE_ARRAY_COMPARATOR).make();
HTreeMap<String, Long> map2 = thedb.getHashMap("lastOccurrence");
NavigableSet<Object[]> map3 = thedb.createTreeSet("actionsPerformedByPerson").comparator(Fun.COMPARABLE_ARRAY_COMPARATOR).make();
しかし、それは間違っているように感じます。同じデータを複数回保存する必要がない、もっと効率的な方法があるに違いありません。
私は Bind クラスとその関数 (secondaryValues、mapInverse など) でかなり遊んできましたが、このデータ セットを希望どおりにマップする方法を見つけることができないようです。
何か助けはありますか?ありがとう。