database - 如何遍历数据库中已经存在的对象并更新字段?
问题描述
我正在构建一个 RESTful API,它将显示我所有的资产/投资。我想在每项资产中显示该资产占投资组合总价值的百分比。我希望 totalValue 是动态的,因此创建的每个新资产都会将(realTimePrice * 金额)加到 totalValue 中。
我的问题是:一旦我完成填充数据库并计算了 totalValue,我如何在数据库中的每个对象上运行并运行 setPercentage() ?
例如:
“名称”:比特币“代码”:BTC-USD “百分比”:20
这就是我播种数据库的方式:
package assets.asset;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
class SeedDB {
@Bean
CommandLineRunner initDatabase(DataBase repository) {
return args -> {
repository.save(new Asset("", "",, , "Crypto"));
repository.save(new Asset("", "",, , "Crypto"));
repository.save(new Asset("", "",, , "Crypto"));
repository.save(new Asset("", "",, , "Stock"));
repository.save(new Asset("", "",, , "Stock"));
repository.save(new Asset("", "",, , "Stock"));
};
}
}
解决方案
这根本不是一个可扩展的设计。一个计算被多次完成。想象一下,您有一个包含 100 万个这些值的表格,并且您需要填写所有这些值的投资组合百分比,您实际上将重新计算总资产价值一百万次。这个值可以在添加新字段时被缓存和更新。
在我看来,资产价值相对于投资组合的百分比,甚至不应该存储在数据库中。原因是,这个值需要经常更新。例如,每次我们添加一项资产时,我们都必须更新所有值的百分比。
这是应根据要求计算的值。
我们可以在数据库中存储一个名为“总资产价值”的特定值。这将保存相关信息。然后每次执行操作以添加新号码时,我们都可以拥有一个可以执行此操作的服务
public void setTotalValue() {
TotalValue+=BigDecimal.valueOf(amount);
repository.save(totalValue); // this line can be however you want to persist your data
}
这个想法是每次添加新资产时都增加总价值,然后当我们想要计算总价值时,我们可以做类似的事情,
public Map<Asset, BigDecimal> getTotalPercentages(List<Asset> assets) {
for (asset : asset) {
map.put(asset, asset.value/totalValue);
}
return map;
}
这将为您动态提供准确的数据,并节省插入数据库的额外时间。
编辑:在评论中给出了一些上下文之后,我重新做了另一个解决方案。
我们可以简单地拥有一个变量 totalValue ,每次您在播种阶段添加资产时都会增长,并且在播种结束时,您可以遍历所有资产并为每个资产设置百分比。
int totalValue = 0;
String[] types = new String[]{"Crypto", "Stock"};
for (int i = 0; i < NUM_OF_DESIRED_ASSETS; i++) {
Random r = new Random();
int value = r.nextInt(10);
int index = r.nextInt(2);
repository.save(new Asset("", "",value, , types[index]));
totalValue+=value;
}
for (asset : assets) {
asset.setPercentage(asset.value/totalValue);
repository.save(asset);
}
推荐阅读
- python - 使用 serverless-python-requirements 进行无服务器部署不起作用
- python - Python shell 和 IDLE 的结果不同
- node.js - 在动态命名的对象中调用方法
- selenium-webdriver - chrome无头浏览器不打开网址
- if-statement - 将内部 if 语句中的条件与外部 else 语句结合起来 - C#
- ruby-on-rails - 如何在默认 Rails 中自定义测试生成器?
- laravel - 如何返回下载文件并仅在控制器 laravel 中继续执行另一个代码
- ios - 使用 UIActivityViewController 检测哪个 App 启动
- tomcat - 检查 tomcat 版本 (version.sh) 时显示错误的服务器版本
- html - Html 表格不会打印全宽