我有一个具有内联键路径和两个索引的对象存储库。第一个索引标识投资组合,例如“2”。第二个索引标识投资组合下的模块,例如投资组合'2'的第3个模块的'2.3'。密钥路径标识模块中的数据对象,例如“2.3.5”。当用户构建他或她的模块时,各个对象将被写入数据库。
假设用户决定删除整个大尺寸的投资组合。我想了解在效率和内存使用方面哪两种方法最适合从特定产品组合的对象存储中删除所有数据。
一种方法可以在单个事务中打开所需投资组合索引上的游标,以删除具有该投资组合索引值的对象库中的每个项目。
在我的特定情况下,第二种方法是使用指针。我有一个指针数组,可以跟踪对象存储中的每个数据对象的关键路径。这是因为用户可以选择在100个项目的模块中的位置2处插入新项目。例如,我将插入的项目添加为2.3.101并放置,而不是单步执行特定模块的存储并将每个项目2.3.2到2.3.100的所有关键路径更改为2.3.3到2.3.101。它位于指针的第2位,因为更新指针要比通过复制,删除它们并使用新的密钥路径再次写入数据库中的大块数据更容易。
因此,第二种方法可以是通过存储在该组合的指针中的密钥路径逐步删除所有数据对象的指针,并在单独的事务中执行每次删除。
问题是:
大型事务(例如跨越许多数据对象的打开游标)是否准确要求浏览器在内存中存储大量数据,以便能够在任何步骤失败时回滚该事务方式是什么?
如果是这样,采用第二种方法是否更好,因为每个事务只对一个数据对象起作用?或者,在同一个对象存储上重复打开小事务并通过特定的密钥路径搜索每个对象而不是通过有序索引单步执行商店是否效率低下?
如果采用多事务处理方法,浏览器是否会足够快地释放内存,以至于整个过程中使用的内存总量会减少,或者它会持续到整个过程完成,无论如何都会累积到同一点。
在这种情况下,请假设大型投资组合的预期大小为每个100个对象的50个模块,这样比较是通过游标处理5,000个数据对象的单个事务与单个事务上执行5,000个单独事务之间的比较数据对象一次通过已知的密钥路径。
也许,我正在过度思考这一切,因为我是新手,并试图匆匆学习一堆东西。感谢您提供的任何指导。