我正在创建一个从多个数据对象返回结果的网页,并且每个对象都有自己的数据访问实现。假设objectA可以返回1,000,000个对象,objectB可以返回2,000,000个对象,具体取决于用户要过滤的内容。我想将搜索结果限制为最大10000,但是搜索条件可能来自objectA或objectB或两者都来自。
假设用户搜索一个仅在objectA中存在该字段的过滤器。这意味着我必须过滤objectA,然后在代码中“加入”以获得相应的objectB。如果精确返回了10000个objectA,那可能意味着返回了20000个对象B。这将导致搜索结果中的20000个对象违反10000个限制。
您将如何实现此算法,其中最多返回10000个对象。之所以需要这样做,是因为我们不想使应用程序服务器的内存中有太多对象,而多个用户可能会导致内存过载。
过去,我们只发出数据库查询,该查询将使我们获得使用SQL连接到objectB的objectA的计数,从而得到一个计数。但是,让我们假设我们不能再使用SQL,只能使用每个对象的数据访问层访问该对象,然后在代码中将它们“连接”在一起。这是错误的方法吗?
// Need to limit the results of objectAList "joined" to objectBList to 10k to reduce memory consumption
List<objectA> objectAList = objectADataaccess.Query(filters[]);
List<objectA> objectBList = objectADataaccess.Query(filters[]);
List searchResults = objectAList.Join(objectBList, "some matching criteria");