LTTBアルゴリズムは複雑すぎてNSPredicate
クエリに組み込むことができません。私はそれが可能だとは思わない。
この複合体をクエリするには、データベースからデータを取り出して、手動で独自のアルゴリズムで処理するのが一番良いと思います。
レルムは、どのようにデータをメモリにプルするかで非常に効率的です。オブジェクトはそのプロパティに触れるときにのみページされます。その 'touch'を@autoreleaspool
に囲むと、そのオブジェクトがいつリリースされるかを制御して、メモリ消費が許容範囲内に保たれるようにすることができます。
ですから、一つ一つのレルムのオブジェクトをチェックしたが、その後、これらのオブジェクトのサブセットを保存しているダウンサンプリングアルゴリズムのために、このようなものは、適切な実装次のようになりますの世話をする必要があります
let realm = try! Realm()
let dataPoints = realm.objects(DataPoint.self)
var filteredPoints = [DataPoint]()
for index in 0..<dataPoints.count {
@autoreleasepool {
let dataPoint = dataPoints[index]
if LTTBBucket(dataPoint) {
filteredPoints.append(dataPoint)
}
}
}
メモリ消費量は最低ですが、速度にも問題がある場合は、このフィルタリングをバックグラウンドスレッドにオフロードする価値があります。この場合、各データポイントのプライマリキーを配列に格納し、完了したらメインスレッドに戻すことができます。
出典
2016-10-28 00:06:56
TiM