>  기사  >  데이터 베이스  >  Redis에서 HyperLogLog 데이터 유형을 사용하는 방법

Redis에서 HyperLogLog 데이터 유형을 사용하는 방법

PHPz
PHPz앞으로
2023-05-29 09:29:12918검색

1. HyperLogLog의 원리

Redis HyperLogLog는 확률론적 알고리즘인 HyperLogLog 알고리즘을 사용하여 카디널리티를 추정합니다. 해시 함수 세트와 길이가 m인 비트 배열을 사용하여 HyperLogLog는 세트의 고유 요소 수를 추정할 수 있습니다.

HyperLogLog 알고리즘에서는 각 요소가 해시되고 해시 값을 바이너리로 변환한 후 바이너리 문자열 접두어의 1 개수에 따라 각 요소에 점수가 매겨집니다. 예를 들어 요소의 해시 값이 01110100011인 경우 접두사의 1 개수는 3이므로 HyperLogLog 알고리즘에서 이 요소의 점수는 3입니다.

 모든 요소의 점수를 계산할 때 각 점수의 역수(1/2^n)를 취한 다음 이러한 역수를 더하고 역수를 취하여 HyperLogLog 알고리즘의 추정 결과인 카디널리티 추정값을 얻습니다.

 HyperLogLog 알고리즘은 비트 배열의 길이 m의 크기를 절충하여 데이터 구조가 차지하는 메모리와 추정값의 정확성(예: 추정 오류)을 손상시키고 데이터 점유 공간 간의 완벽한 균형을 얻습니다. 그리고 오류의 정도가 더 작습니다.

 한마디로 HyperLogLog 알고리즘의 핵심 아이디어는 해시 함수와 비트 연산을 기반으로 해시 값을 비트 스트림으로 변환하고 선행 0의 개수를 계산하여 고유 값의 개수를 빠르게 추정하는 것입니다. 대규모 데이터 세트에서. 하이퍼로그로그 알고리즘을 사용하면 매우 큰 데이터세트에서 중복된 웹페이지를 빠르게 식별할 수 있습니다.

2. 사용 단계:

 Redis HyperLogLog는 컬렉션의 요소 수를 추정하는 데 사용할 수 있는 데이터 구조로, 아주 적은 메모리를 사용하여 대량의 데이터를 유지할 수 있습니다. 기존 추정 알고리즘보다 정확하고, 대용량 데이터 처리 시 속도가 매우 빠르다.

 간단한 예로 HyperLogLog를 사용하여 웹사이트를 방문하는 독립 IP 수를 계산할 수 있습니다.

  • 먼저 HyperLogLog 데이터 구조를 생성합니다: PFADD hll:unique_ips 127.0.0.1<code>PFADD hll:unique_ips 127.0.0.1

  • 为每次访问ip添加到unique_ips数据结构中: PFADD hll:unique_ips 192.168.1.1

  • 获取计算集合中元素数量的近似值: PFCOUNT hll:unique_ips

  • 可以通过对多个HyperLogLog结构(例如按天或按小时)的合并,来获得更精确的计数。

  需要注意的是,HyperLogLog虽然可以节省大量的内存,但它是一种估计算法,误差范围并不是完全精确的,实际使用时应注意其适用范围。

3.实现请求ip去重的浏览量使用示例

Redis에서 HyperLogLog 데이터 유형을 사용하는 방법

4.Jedis客户端使用

  1. 添加依赖,引入jedis依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.0</version>
</dependency>

  2.创建一个Jedis对象:

Jedis jedis = new Jedis("localhost");

  3.向HyperLogLog数据结构添加元素:

jedis.pfadd("hll:unique_ips", "127.0.0.1");

  4.获取计算集合中元素数量的近似值:

Long count = jedis.pfcount("hll:unique_ips");
System.out.println(count);

  5.可以通过对多个HyperLogLog结构的合并来获得更精确的计数。在Jedis中可以使用PFMERGE

unique_ips 데이터 구조에 각 액세스 IP를 추가하세요: PFADD hll:unique_ips 192.168.1.1

계산된 집합의 요소 수에 대한 근사치를 구하세요: PFCOUNT hll :unique_ips

여러 HyperLogLog 구조(예: 일별 또는 시간별)를 병합하여 더 정확한 개수를 얻을 수 있습니다.

HyperLogLog는 많은 메모리를 절약할 수 있지만 추정 알고리즘이므로 실제로 사용할 때 적용 범위가 완전히 정확하지는 않습니다.

3. 페이지 뷰를 사용하여 요청 IP 중복 제거를 구현하는 예
  • Redis 방법 HyperLogLog 데이터 유형을 사용하려면

    4. Jedis 클라이언트 사용
  •  1. 종속성을 추가하고 jedis 종속성을 도입합니다:

    jedis.pfmerge("hll:unique_ips", "hll:unique_ips1", "hll:unique_ips2", "hll:unique_ips3");

     2. Jedis 객체 생성:
  • Config config = new Config();
    config.useSingleServer().setAddress("redis://localhost:6379");
    RedissonClient redisson = Redisson.create(config);
  •  3. HyperLogLog 데이터 구조에 요소를 추가합니다:

    RHyperLogLog<String> uniqueIps = redisson.getHyperLogLog("hll:unique_ips");

     4. 계산 세트의 요소 수에 대한 근사치를 구합니다:
  • uniqueIps.add("127.0.0.1");
  •   5. 여러 HyperLogLog 구조를 병합하면 더 정확한 개수를 얻을 수 있습니다. Jedis에서 PFMERGE 명령을 사용하여 HyperLogLog 데이터 구조를 병합할 수 있습니다:

    long approximateCount = uniqueIps.count();
    System.out.println(approximateCount);

    5. Redission 사용 종속성
  •   1. RedissonClient 객체 생성

    RHyperLogLog<String> uniqueIps1 = redisson.getHyperLogLog("hll:unique_ips1");
    RHyperLogLog<String> uniqueIps2 = redisson.getHyperLogLog("hll:unique_ips2");
    uniqueIps.mergeWith(uniqueIps1, uniqueIps2);

    2. RHyperLogLog 객체 생성
  • rrreee
3. 요소 추가

rrreee

  4. 대략적인 수량 가져오기
    rrreee
  • 5. 여러 HyperLogLog 개체 병합

    rrreee

    6. HyperLogLog가 제공하는 기능과 방법
  • 기능:

  • 정확도는 낮지만 시간이 걸립니다. 메모리가 거의 없습니다.

  • 중복 계산 없이 새 요소 삽입을 지원합니다.

메모리 사용량과 계산 정확도를 최적화하기 위한 지침을 제공합니다. 예를 들어 PFADD, PFCOUNT, PFMERGE 및 기타 지침이 있습니다.

데이터 세트에 있는 다양한 요소의 수, 즉 세트의 카디널리티를 추정할 수 있습니다.

여러 HyperLogLog 개체에 대한 병합 작업을 지원하여 이러한 컬렉션의 전체 카디널리티에 대한 근사치를 얻습니다. 🎜🎜🎜🎜HyperLogLog에서 일반적으로 사용되는 방법: 🎜🎜🎜🎜PFADD 키 요소 [요소 ...]: HyperLogLog 구조에 하나 이상의 요소를 추가합니다. 🎜🎜🎜🎜PFCOUNT 키 [key...]: 하나 이상의 HyperLogLog 구조에 대한 카디널리티 추정치를 가져옵니다. 🎜🎜🎜🎜PFMERGE destkey sourcekey [sourcekey ...]: 하나 이상의 HyperLogLog 구조를 대상 구조에 병합합니다. 🎜🎜🎜🎜PFSELFTEST [numtests]: HyperLogLog 추정 성능 및 정확성 테스트(Redis4.0+ 버전만 해당)🎜🎜🎜🎜  HyperLogLog는 많은 메모리를 절약할 수 있지만 여전히 추정 알고리즘이라는 점에 유의해야 합니다. 마진은 완전히 정확하지 않으며 약간의 계산 비용이 듭니다. 실제 애플리케이션에 따라 요소 수를 추정하기 위해 HyperLogLog를 사용할지 또는 다른 데이터 구조를 사용할지 여부를 고려해야 합니다. 🎜🎜7. 사용 시나리오 요약: 🎜🎜 HyperLogLog를 사용하는 Redis의 주요 기능은 대규모 데이터 스트림(뷰, IP, 도시)의 경우 중복 제거 계산을 수행하는 것입니다. 🎜🎜구체적으로 다음은 Redis HyperLogLog가 중복 제거 및 계산에 사용되는 몇 가지 시나리오입니다. 🎜
  • 페이지 뷰 계산 - 웹 애플리케이션에서 HyperLogLog를 사용하여 각 페이지에 대한 고유 방문자 수를 계산할 수 있습니다. HyperLogLog 기술을 사용하여 다양한 기간에 걸쳐 이 페이지의 평균 방문 수를 계산합니다.

  • HyperLogLog는 빅 데이터 컬렉션의 사용자 수를 분석하는 데 중요한 유용성을 가지고 있습니다. 확률 기반 데이터 구조는 고유한 사용자 ID와 같은 데이터 세트를 처리할 때 특히 효과적입니다. HyperLogLog는 해싱 후 제한된 수의 해시 값만 저장하며 데이터 세트의 크기를 추론할 수 있습니다.

  • 광고 클릭 수 계산 - 웹사이트나 애플리케이션의 광고 분석을 위해 HyperLogLog를 사용하여 유효 클릭 수, 즉 중복되지 않거나 고유한 클릭 수를 캡처할 수 있습니다.

위 내용은 Redis에서 HyperLogLog 데이터 유형을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제