近隣の人が実現(Redis 3.2以上のバージョンとes性能比較)
3344 ワード
1.
100データ
2.
1000データ
3.
10,000データ
4.100000
1.redisにも100件のデータがある場合
ES取得開始距離50000 m以内人ES取得データ総量:39 ES取得データ消費時間:168 Redis取得開始距離Tom先生50000 m以内人Redis取得データ総量:40 Redis取得データ消費時間:79
2回目のテスト:
ES取得開始距離50000 m以内人ES取得データ総量:39 ES取得データ消費時間:198 Redis取得開始距離Tom先生50000 m以内人Redis取得データ総量:40 Redis取得データ消費時間:60
データ量が少ない場合でも2、3倍の差があります
2.redisにも1000件のデータがある
ES取得開始距離私から50000000 m以内人ES取得データ総量:960 ES取得データ消費時間:642 Redis取得開始距離私から50000000 m以内人Redis取得データ総量:1000 Redis取得データ消費時間:164
2回目のテスト
ES取得開始距離私から50000000 m以内人ES取得データ総量:960 ES取得データ消費時間:417 Redis取得開始距離私から50000000 m以内人Redis取得データ総量:1000 Redis取得データ消費時間:110
3.redisにも10000件のデータがある
ES取得開始距離私99999999 m以内人ES取得データ総量:9040 ES取得データ消費時間:1559 Redis取得開始距離私99999999 m以内人Redis取得データ総量:10040 Redis取得データ消費時間:316
2回目のテスト
ES取得開始距離私99999999 m以内人ES取得データ総量:9040 ES取得データ消費時間:1204 Redis取得開始距離私99999999 m以内人Redis取得データ総量:10040 Redis取得データ消費時間:343
差は4,5倍になった
4.redisにも100000件のデータがあります(esのデフォルトでは10000件のデータしか出せませんが、100000はプレゼンテーションをしません)
結論:
Esはjavaが書いたもので、redisはc(考えてみればredisも速いはず)
JAvaコードは仮想マシン上で実行する必要があります
cとc++はプラットフォーム自体のnativeマシンコードにコンパイルできる
直接ハードウェアで動作し、ポインタで直接ハードウェアを操作できます.
説明:
c言語はコンピュータの高度な言語である.
高度な言語は主にアセンブリ言語に比べて、機械のハードウェアシステムから基本的に離れ、人々がより理解しやすい方法でプログラムを書く.C言語は、少量のマシン言語のみを生成し、実行環境のサポートを必要とせずに実行できる効率的なプログラム設計言語であり、低レベルのメモリを簡単にコンパイル、処理することができる.
C言語は多くの低レベル処理機能を提供しているが、プラットフォーム間の特性を維持しており、標準規格で書かれたC言語プログラムは、組み込みプロセッサやスーパーコンピュータなどのジョブプラットフォームを含む多くのコンピュータプラットフォームでコンパイルすることができる.
redisは速いのに、どうして?
①(純メモリ)Redisはすべてのデータをメモリに入れ、非データ同期は正常に動作し、ディスクからデータを読み取る必要はなく、0回IOである.メモリ応答時間は約100ナノ秒であり,これはRedis速度の速い重要な基礎である.
②シングルスレッド(アクセスデータはシングルスレッド)マルチスレッドコンテキスト切替なし、ロックによるブロックもなし
(単一スレッドとは、Redisがこのスレッドにアクセスする役割を果たすスレッドが1つしかないことを意味し、Redisにはプロセスが1つしかないわけではありません)
③多重I/O多重化機構
I/O多重化とは、実際には、複数の接続の管理が同じプロセスで行われることを意味します.マルチパスとはネットワーク接続を指し、多重化は同じスレッドにすぎない.ネットワークサービスにおいてI/O多重化は,複数の接続されたイベントを一括してトラフィックコード処理に通知し,処理の仕方をトラフィックコードで決定する役割を果たす.I/O多重モデルでは、最も重要な関数呼び出しはI/O多重関数であり、複数のファイル記述子(fd)の読み書き状況を同時に監視することができ、そのうちのいくつかのfdが読み取り/書き込み可能である場合、この方法は読み取り/書き込み可能なfd個数を返す.
テストコード:
@Test
public void compare(){
int size = 100,radius = 50000;
System.out.println("ES " + radius + " ");
Long esStartTime = System.currentTimeMillis();
SearchResult result = nearbyService.search(myPointConfig.getLat(),myPointConfig.getLon(), radius, size, null);
Long esEndTime = System.currentTimeMillis();
Long esTime = esEndTime - esStartTime;
System.out.println("ES :" +result.getTotal());
System.out.println("ES :" +esTime);
// radius
System.out.println("Redis " + radius + " ");
Long redisStartTime = System.currentTimeMillis();
GeoCoordinate coordinate = new GeoCoordinate(myPointConfig.getLon(), myPointConfig.getLat());
List responses1 = jedisGeoUtil.geoRadius("nearby",coordinate,50);
Long redisEndTime = System.currentTimeMillis();
Long redisTime = redisEndTime - redisStartTime;
System.out.println("Redis :" +responses1.size());
System.out.println("Redis :" +redisTime);
}