Что делать с дублированием?

9 years 9 months ago #277 by aka
aka replied the topic: Что делать с дублированием?
Спасибо автору за программу!

у меня в последней версии сканер вылетает на обработке дубликатов, можете подсказать, как можно решить проблему?

Исходные данные следующие:
Fedora release 18 (Spherical Cow)
Linux tab.home.lan 3.11.10-100.fc18.i686 #1 SMP Mon Dec 2 21:16:35 UTC 2013 i686 i686 i386 GNU/Linux
mysql-5.5.35-1.fc18.i686
mysql-connector-python3-1.0.12-1.fc18.noarch
mysql-server-5.5.35-1.fc18.i686
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 20G 7.2G 11G 40% /
tmpfs 497M 56K 497M 1% /tmp
в логе:
2014-06-26 04:32:12,202 INFO Time estimated:4 hours, 45 minutes, 54 seconds.
2014-06-26 04:32:12,203 INFO Starting mark_double proc with DUBLICATES_FIND param = 1
Traceback (most recent call last):
File "/opt/opds/py/sopdsd.py", line 338, in <module>
daemon.start()
File "/opt/opds/py/sopdsd.py", line 292, in start
Daemon.start(self)
File "/opt/opds/py/sopdsd.py", line 146, in start
self.run()
File "/opt/opds/py/sopdsd.py", line 327, in run
self.run_scanner()
File "/opt/opds/py/sopdsd.py", line 318, in run_scanner
self.scanner.scan_all()
File "/opt/opds/py/sopdscan.py", line 102, in scan_all
self.opdsdb.mark_double(self.cfg.DUBLICATES_FIND)
File "/opt/opds/py/sopdsdb.py", line 893, in mark_double
cursor.execute(sql,data)
File "/usr/lib/python3.3/site-packages/mysql/connector/cursor.py", line 415, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "/usr/lib/python3.3/site-packages/mysql/connector/connection.py", line 593, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
File "/usr/lib/python3.3/site-packages/mysql/connector/connection.py", line 515, in _handle_result
raise errors.get_exception(packet)
mysql.connector.errors.DatabaseError: 3 (HY000): Error writing file '/tmp/MYdaGhaA' (Errcode: 28)

С уважением, Ринат

Please Войти or Create an account to join the conversation.

  • aka
  • aka's Avatar
  • Offline
  • Новый участник
  • Новый участник
More
9 years 9 months ago - 9 years 9 months ago #278 by mitshel
mitshel replied the topic: Что делать с дублированием?
Да действительно такая проблема обнаружилась. Связана она с тем, что поиск дубликатов реализован полностью средствами MYSQL. Один из запросов в хранимой процедуре sp_mark_dbl приводит к тому что mysql создает достаточно объемный временный файл. Если раздел, где создается временный файл (у вас /tmp) не очень большой, то раздел переполняется, что приводит к невозможности выполнения запроса и возникает указанная ошибка.
Так получается что в ряде систем /tmp бывает недостаточно большим, что приводит к этой проблеме.

К сожалению у меня при тестировании версии 0.21 такой проблемы не возникло, поэтому пока могу предложить следующие решения:
1. Отключить обработку дубликатов (DOUBLICATES_FIND=no)
либо
2. В файле конфигурации mysql указать новый путь к tmpdir, который имеет достаточный размер.
(например в Fedora в файл /etc/my.cnf в раздел [msqld] записать строку tmpdir=/var/tmp - /var/tmp конечно же должен существовать, ну и перегрузить после этого mysqld)
либо
3. Пока использовать версию 0.20 программы

В дополнении скажу, что имеющаяся процедура поиска дубликатов получилась достаточно быстрой и эффективной если бы не эта засада. Постараюсь в будущем придумать как снять эту проблему, но пока смотрите выше: либо отключайте поиск дубликатов (решение п.1) либо дайте Mysql больше места для временых файлов (решение 2), ну или оставайтесь на версии 0.20 (разница только в том что версия 0.21 находит на порядок больше дубликатов)
Last Edit: 9 years 9 months ago by mitshel.

Please Войти or Create an account to join the conversation.

  • mitshel
  • mitshel's Avatar
  • Offline
  • Администратор
  • Администратор
More
9 years 9 months ago - 9 years 9 months ago #280 by Chiller
Chiller replied the topic: Что делать с дублированием?
Имеется офиц.версия архива библиотеки либрусека (не самой последней свежести). Sopds версии 0.20 показывала около 280 000 книг. Поставил версию 0.21 с полным пересозданием базы, сейчас показывает около 240 000 на том же архиве библиотеки. Может быть такая разница ?
Last Edit: 9 years 9 months ago by Chiller.

Please Войти or Create an account to join the conversation.

  • Chiller
  • Chiller's Avatar
  • Offline
  • Новый участник
  • Новый участник
More
9 years 9 months ago - 9 years 9 months ago #281 by mitshel
mitshel replied the topic: Что делать с дублированием?
Да... остальное это дубликаты. В реальности в базу загружено все 280000 книг. Но показываемое количество это количество уникальных с точки зрения системы книг. Посмотрите например у Жюля Верна. Зайдите на самые известные книги и внизу вы увидете ссылку на все выявленные дубликаты которые в общую сумму система не посчитала (но в базу загрузила и доступ к ним как видете есть). Например 20 тысяч лье под водой  у меня имеет целых 6 дубликатов.

Распознавание дубликатов можно отключивть например при помощи параметра
DUBLICATES_FIND=clear
Этот параметр снимет у всех книг признак дубликата. При этом полного перескана с очисткой БД делать не нужно.
Last Edit: 9 years 9 months ago by mitshel.

Please Войти or Create an account to join the conversation.

  • mitshel
  • mitshel's Avatar
  • Offline
  • Администратор
  • Администратор
More
Time to create page: 0.160 seconds