0

我们正在使用 SAP Mobile Platform SDK 3.0 SP14 实施原生 Android 应用程序。该应用程序具有多个离线商店,可在设备上本地保存主数据。只会请求数据,不会获取数据,因为设备上的数据不会被更改。每个商店都有相同的简单实体类型,包含 4 个字段。最后一个是字符串字段,其长度可达 150 个字符。要访问商店中的离线数据,应用程序会一次选择所有数据。但是这个请求非常慢(每秒约 1,000 个项目)。我们最大的商店有 500,000 件商品,因此请求该商店的持续时间为 500 秒。有没有办法加快对大型线下商店的请求?

if (offlineStore != null) {
        try {
            //Define the resource path
            String resourcePath = format("%1$s",
                        StoreDefinitions.Data.ENTITY_SET_NAME);

            ODataRequestParamSingle request = new ODataRequestParamSingleDefaultImpl();
            request.setMode(ODataRequestParamSingle.Mode.Read);
            request.setResourcePath(resourcePath);
            //Send a request to read the travel agencies from the local database
            ODataResponseSingle response;

            // executeReadEntitySet: poor performance
            response = offlineStore.executeReadEntitySet(resourcePath, null);
...
4

2 回答 2

0

您可以将 OData 筛选器和分页选项与 SMP SDK 中的离线商店 API 一起使用,就像使用 OData v2 Web 服务一样。例如,您可以在 resourcePath 字符串中添加“$filter=property1 eq 'value'”,这与 SQL 查询中的 WHERE 子句具有相同的效果。对于分页,您可以将 $top 和 $skip 选项与离线商店查询一起使用。

如果你真的需要使用SMP 3.0 SDK一次访问500,000个项目,恐怕在本地没有什么好办法来加快访问速度。但它确实提出了一个更大的问题,即您为什么要尝试在移动设备上访问如此大量的项目?

于 2017-05-02T19:53:51.667 回答
0

您正在执行的请求归结为在数据库级别进行简单的表扫描,不幸的是,没有办法添加可以加速此过程的请求参数(即使数据库请求“更简单”)。使这更快的唯一方法是直接访问数据库,从 SMP SDK 3.0 开始不再支持该数据库。

无论如何,我建议在评论中继续讨论。也许我们可以为您找出一条替代路径。

于 2017-05-04T10:03:15.800 回答