Попробуйте это решение, которое отлично сработало для меня.
В основном, это переустановка / обновление до последней версии mysql от варева, а затем установка mysqlclient
или MySQL-Python
из global pip3
вместо virtualenv pip3
.
Затем вы получите доступ к virtualenv
и успешно установите mysqlclient
или MySQL-Python
.
Три таблицы (один для хранения всех объектов, один для всех тегов, и один для отношения между двумя), правильно индексированный, с набором внешних ключей, работающим на надлежащей базе данных, должны работать хорошо и масштабироваться правильно.
Table: Item
Columns: ItemID, Title, Content
Table: Tag
Columns: TagID, Title
Table: ItemTag
Columns: ItemID, TagID
Если Вы используете базу данных, которая поддерживает карту - уменьшают, как couchdb, храня теги в поле простого текста или перечисляют поле, действительно лучший способ. Пример:
tagcloud: {
map: function(doc){
for(tag in doc.tags){
emit(doc.tags[tag],1)
}
}
reduce: function(keys,values){
return values.length
}
}
Выполнение это с group=true сгруппирует результаты именем тега, и даже возвратит количество количества раз, что с тегом встретились. Это очень похоже на подсчет случаев слова в тексте .
Используйте единственный столбец [1] форматированного текста для хранения тегов и используйте способный механизм полнотекстового поиска для индексации этого. Еще Вы столкнетесь с масштабирующимися проблемами при попытке реализовать логические запросы.
при необходимости в деталях о тегах Вы имеете, можно или отслеживать его в инкрементно сохраняемой таблице или выполнить пакетное задание для извлечения информации.
[1] Некоторый RDBMS даже обеспечивает собственный тип массива, который мог бы еще лучше подойти для устройства хранения данных, не нуждаясь в шаге парсинга, но мог бы вызвать проблемы с полнотекстовым поиском.
Я всегда сохранял теги в отдельной таблице и затем имел таблицу отображения. Конечно, я ничего никогда не делал на действительно крупном масштабе также.
Наличие таблицы "тегов" и таблицы карты делает его довольно тривиальным для генерации облаков тегов & такой, так как можно легко соединить SQL для получения списка тегов с количествами того, как часто каждый тег используется.