どうでしょクエリオブジェクトコレクションのコロジカルフットプリント基準/SQL様)?
-
01-07-2019 - |
質問
い集めた数百メージに必要なクエリをこのリストを返すオブジェ合わせSQLや基準などを返します。例えばけなければならなくなるかもしれの一覧車オブジェとし、返却するまでに全車の1960年代のライセンスプレートで始まるAZいほうから順に順序付けられての名車モデルです。
知って JoSQL, が、誰にでも使いこいの経験があればその他/国内ですか?
解決
利用してい Apache Commons JXPath 生産願います。ですることを可能にしXPath表現オブジェクトのグラフはJava.
他のヒント
フィルタリングをいたその他の応答となります。
フィルタリングにはない拡張性のものです。表面の時間計算量を達成するため必要な範O(n が重要であり、これがていない拡張性がオブジェクトの数のコレクションしていることもで 以上 試験を適用する必要がある各オブジェクトによってクエリー、時間の複雑性をより正確にはO(n t) t での試験への適用各オブジェクトです。
で性能が低下してオブジェクトの追加追加の収集、 および/または としての試験回数のクエリが増加します。
もう一つの方法がありこのためには、指定理論。
つのアプローチ の構築 指標 の 分野 内に格納されているオブジェクトのコレクションおよびいただくにあたり、その後試験にお返します。
言い回収 Car
オブジェは、毎 Car
オブジェクトは分野 color
.あなたのクエリは相当の"SELECT * FROM cars WHERE Car.color = 'blue'
".きの構築インデックス Car.color
, は、基本的に見るようになります:
'blue' -> {Car{name=blue_car_1, color='blue'}, Car{name=blue_car_2, color='blue'}}
'red' -> {Car{name=red_car_1, color='red'}, Car{name=red_car_2, color='red'}}
それは、クエリ WHERE Car.color = 'blue'
, のセットブルーの車が取得できるO(1)時間で複雑になります。があった場合の追加試験で検索すると、その試験のそれぞれの車と 候補者の設定 確認が合致したので、残りの試験にお返します。以降、候補者の設定ができなコレクションの全種類、時間の複雑さは 以上 O(n)(工学の意味では、コメントを参照。性能は劣化しません としてい, がオブジェクトの追加追加するものと期待される。もっとも、これはあくまでも未だ完璧なものを読みます。
もう一つのアプローチは、何かの参照として 常クエリを指.説明:従来の繰り返し、フィルタリングコレクションは反復べてのオブジェクトは試験を実施いずれかにマッチするかどうかを返します。でフィルタリングのように走行クエリに渡り収集します。立エindexは次のようになりますので、コレクションでの代わりに走り、クエリが一のための各オブジェクトコレクションにも収集できる照会されました。
A 常クエリを指 のようなものを登録するクエリの一部の 知的集, では、オブジェクトとして追加や削除をコレクションからの回収が自動的に試験の各オブジェクトすべてを設けることによってそのクエリを登録しています。場合にはオブジェクトにマッチし立てのクエリの収集が追加/削除でセットに専用の収納物のマッチングを返します。その後、物体マッチングを登録した質問が取得できるO(1)時間で複雑になります。
上記の情報から CQEngine(コレクションクエのエンジン).これは基本的にはNoSQL索エンジン検索をする物体からJavaを用いた集SQLようなクエリでは、オーバーヘッドのない、繰り返し処理するものと期待される。セットでのアイデア、プラス。免責事項:私た。でオープンソースとmavenます。 までに役立てくださいupvoteす!
そうなんでする必要がありますが、技術が日常の応答までの時間。
と思うことは問題を解決でLambdaJ.あります。http://code.google.com/p/lambdaj/
ここでの例:
見のための活動顧客//(List版)
List<Customer> activeCustomers = new ArrayList<Customer>();
for (Customer customer : customers) {
if (customer.isActive()) {
activeCusomers.add(customer);
}
}
LambdaJ版
List<Customer> activeCustomers = select(customers,
having(on(Customer.class).isActive()));
もちろん、このような美しさの影響の性能(ちょっとし---平均の2倍)ですが、できるだけ読みやコードについて教えてください。
多くの多くの特徴、例がソート:
ソート反復
List<Person> sortedByAgePersons = new ArrayList<Person>(persons);
Collections.sort(sortedByAgePersons, new Comparator<Person>() {
public int compare(Person p1, Person p2) {
return Integer.valueOf(p1.getAge()).compareTo(p2.getAge());
}
});
ソートラムダ仕様
List<Person> sortedByAgePersons = sort(persons, on(Person.class).getAge());
が必要な場合は、単一のコンクリートの試合ではクラスの実施、コンパレータ、それをドオブジェクトのハッシュされた分野が含まれまでの指数を決めて勝負あり。したいときに見よる)オブジェクトコレクションにいるライブラリーのようなJoSQLるされるようになったと言っても、些細な事例を使いいます)。
一般的に、してしまいがちな組み込みダービーに入っても私の小さい用途に使用Hibernateためのアノテーションを定義し、モデル授業やHibernateの対キャッシュスキームをかけます。
混雑して待たされることは、コンパレータを取る範囲の年間ライセンスプレートパターン入力パラメータ。それだけ繰り返し処理を実行しを通じてのコレクションおよびコピーのオブジェクト。まるで終わりパッケージ全体のカスタムコンパレータ。
の Comparator
オプションは悪くない、ご利用の場合は匿名クラス(ないように作成冗長クラスのプロジェクトが最終的に見てみますと、流れの比較のほうが場所取りすぎでいつでループのコレクション全体の自分で定することが条件にマッチング項目:
if (Car car : cars) {
if (1959 < car.getYear() && 1970 > car.getYear() &&
car.getLicense().startsWith("AZ")) {
result.add(car);
}
}
そして、選別...でも、痛みの裏面もあるクラス Collections
その sort
方法、受 Comparator
...