woonem
@woonem

Как исключить повторение записей в большом списке?

Допустим есть такой код:
<?php
function getlist($string){
 if($string>0 && file_exists('./list.txt') && filesize('./list.txt')>=($string*2)){
  $list=fopen('./list.txt', 'a+');
  fseek($string*2-2);
  return fgets($list, 1);
 }
}

function putlist($data){
 if($data){
  $data=substr($data, 0, 1);
  file_put_contents('./list.txt', $data."\n", FILE_APPEND);
 }
}

Это упрощённый вариант, нет блокировок.
Тут вводимая строка сокращается до одного символа, но в реальности будет больше и строк будет много (list.txt больше 1 ТБ).

Как избежать повторения строк без потери производительности?

Можно попробовать так:
$data=$_GET['data']; //$data=='d';
for($i=1; $d=getdata($i), $d; $i++){
 if($d===$data){
  $cancel=true;
  break;
 }
}
if(!$cancel)
 putdata($data);

Но при больших объёмах данных такой способ не подходит.
Как, например, google убирает повторяющиеся ссылки из индексирования?
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
Вам для разового применения (почистить базу) или для постоянного использования?

  • Можно разбить весь объем на пачки и применить подход map-reduce (как раз как Google)
  • Можно один раз пройтись по всем данным и построить индекс, чтобы использовать его в дальнейшем
  • А можно просто положить все данные в какую-либо базу данных, поддерживающую этот функционал из коробки
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы