避免 Anylogic 中的数据库查询
Avoiding database queries in Anylogic
我想避免在 Anylogic 中进行代价高昂的重复数据库查询。我在 Stack Overflow 中看到了以下线程,其中提供了一个简单的三步答案,但我不确定这三步中的第二点实际上意味着什么:
- 在模型启动时将所有行作为 class 的实例保存到映射中 - 您可以使用 Origin/Destination 作为键(使用 Anylogic 的 Pair 对象)和 class实例作为值
我创建了一个 class,它将我数据库中每一列的信息作为输入。我现在想将每一行保存为 class 的一个实例 - 有没有简单的方法可以做到这一点?我可能会遗漏一些简单的东西,因为我是 Anylogic 的新手。
我也不确定如何创建映射,如果有人可以为上面的第 2 点添加更多细节,我将不胜感激!
这实际上是最好的建议,您创建了 class,这是重要的一步,但是现在,class 的一个元素将用作键...例如名称...例如,如果您的 class 将 firstName 作为一个变量,将 lastName 作为另一个变量,您将使用一个字符串,该字符串是 firstName 和 lastName 的串联作为您的键。当然,任何密钥都可以,假设它对您的所有 table 都是唯一的。也可以使用整数作为 id。
现在,当您读取数据库时,您会得到类似这样的信息:
for(Tuple t : yourQueryResults){
YourClass yc=new YourClass(t.get(db.var1),t.get(db.var2));
String totalName=t.get(db.first_name)+"_"+t.get(db.last_name);
yourCollection.put(totalName,yc);
}
现在,每次您想查找姓名为 a 的人(例如“John Doe”)时,您都可以执行
yourCollection.get("John_Doe").theVarYouWant;
如果你使用id而不是name,你可以设置一个int作为key,然后就可以了yourCollection.get(theId).theVarYouWant
我想避免在 Anylogic 中进行代价高昂的重复数据库查询。我在 Stack Overflow
- 在模型启动时将所有行作为 class 的实例保存到映射中 - 您可以使用 Origin/Destination 作为键(使用 Anylogic 的 Pair 对象)和 class实例作为值
我创建了一个 class,它将我数据库中每一列的信息作为输入。我现在想将每一行保存为 class 的一个实例 - 有没有简单的方法可以做到这一点?我可能会遗漏一些简单的东西,因为我是 Anylogic 的新手。
我也不确定如何创建映射,如果有人可以为上面的第 2 点添加更多细节,我将不胜感激!
这实际上是最好的建议,您创建了 class,这是重要的一步,但是现在,class 的一个元素将用作键...例如名称...例如,如果您的 class 将 firstName 作为一个变量,将 lastName 作为另一个变量,您将使用一个字符串,该字符串是 firstName 和 lastName 的串联作为您的键。当然,任何密钥都可以,假设它对您的所有 table 都是唯一的。也可以使用整数作为 id。
现在,当您读取数据库时,您会得到类似这样的信息:
for(Tuple t : yourQueryResults){
YourClass yc=new YourClass(t.get(db.var1),t.get(db.var2));
String totalName=t.get(db.first_name)+"_"+t.get(db.last_name);
yourCollection.put(totalName,yc);
}
现在,每次您想查找姓名为 a 的人(例如“John Doe”)时,您都可以执行
yourCollection.get("John_Doe").theVarYouWant;
如果你使用id而不是name,你可以设置一个int作为key,然后就可以了yourCollection.get(theId).theVarYouWant