【问题标题】:Am I charged with read operations everytime the location is changed?每次更改位置时,我都要负责读取操作吗?
【发布时间】:2018-06-04 19:07:42
【问题描述】:

我有一个 Firestore 数据库,其中包含 100 个位置,每个位置都正确设置了 latlng。我创建了一个使用回调从数据库中实际读取数据的方法:

public static void readLocations(MyCallback myCallback) {
    locationsRef.get().addOnCompleteListener(task -> {
        if (task.isSuccessful()) {
            List<LocationModel> locationList = new ArrayList<>();
            for (QueryDocumentSnapshot document : task.getResult()) {
                LocationModel locationModel = document.toObject(LocationModel.class);
                locationList.add(locationModel);
            }
            myCallback.onCallback(locationList);
        }
    });
}

我正在使用LocationCallback 来跟踪当前位置。使用下面的代码,我在 LocationCallback 中调用 readLocations() 方法来计算一些距离:

LocationCallback locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        for (Location myLocation : locationResult.getLocations()) {
            currentLocation = myLocation;
            LatLng currentLatLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());

            readLocations(locationList -> {
                for (LocationModel lm : locationList) {
                    Double lat = lm.getLat();
                    Double lng = lm.getLng();
                    Location location = new Location("");
                    location.setLatitude(lat);
                    location.setLongitude(lng);

                    //Calculations
                 }
            });
        }
    }
};

因此,每次更改当前位置时,我都会计算当前位置与数据库中位置之间的距离。所以每次换位置都调用readLocations()方法,是不是每次都在查询数据库?换句话说,每次更改当前位置,我都要承担 100 次读取操作?还是因为我已经使用了get() 调用,会被视为单个操作?

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    每次调用 get() 时,您都需要为服务器上读取的文档数量付费。如果在您的客户端中启用了本地持久性(默认情况下),那么如果文档在服务器上也没有更改,则文档可能来自缓存。缓存文档读取不收费。

    【讨论】:

    • 感谢您的回答道格。所以你实际上是说如果服务器上的数据永远不会改变,当调用readLocations() 方法时,我是从缓存中获取数据,对吧?
    • 是的,除非您的查询结果集因更改物理位置而发生更改。该结果集中先前未缓存的文档将需要来自服务器。
    • 非常感谢你,你永远是救世主! ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多