Симферопольский Форум: Посоветуйте базу данных. - Симферопольский Форум

Перейти к содержимому

Внимание! Для всех новых пользователей введена премодерация сообщений и тем.
Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Посоветуйте базу данных. Как лучше хранить данные и где.

#1 Пользователь офлайн   Kit 

  • Mega poster
  • PipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 116
  • Регистрация: 17 Сентябрь 10
  • Сказали спасибо раз:
  • ГородСимферополь
  • Страна:  

Отправлено 29 Сентябрь 2012 - 23:11

Всем добрый вечер.

Есть задумка хранения ряда текстовых данных. К примеру, есть лингвистический текст, со знаками препинания. Делю текст на предолжения, или даже на более мелкие фрагменты, например слова. Получившийся фрагмент может быть длинной более 255 символов, а может и не быть :)
Хочу использовать базу MySQL или PostgreSQL.
Какой тип поля выбрать для хранения данных фрагментов, чтобы место на жестком диске диске, где располагается база, использовалось наиболее рационально? Чтобы не оставалось значительного зарезервированного места по длине данных. Данные в поле изменяться не будут, один раз пишутся, без абдейта.
Буду признателен за рекомендации базы данных, типа поля и настроек. Заранее спасибо.

Спасибо, что я все ещё Kit!

#2 Пользователь офлайн   n00ne 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 1 983
  • Регистрация: 27 Ноябрь 10
  • Сказали спасибо раз:
  • Страна:  

Отправлено 30 Сентябрь 2012 - 00:08

не совсем понятна задача. точнее совсем не понятна. зачем текст хранить в БД? и что Вы с ним хотите там делать?


#3 Пользователь офлайн   Schwein 

  • –· ·– ···· ··– ·––– ··––··
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Модераторы
  • Сообщений: 14 868
  • Регистрация: 15 Сентябрь 10
  • Сказали спасибо раз:

Отправлено 30 Сентябрь 2012 - 00:27

Ага. Так как совершенно непонятно зачем это всё нужно, то ответ будет буквальный...

таблица из трёх полей (типы приведены для MySQL):
quotation_id (тип mediumint unsigned) — уникальный номер предложения;
part_id (тип smallint unsigned) — номер части предложения;
quotation_part (тип char(20) ) — часть предложения.

При внесении данных исходное предложение разбивается на куски по 20 символов. При выборке — склеивается, с отсечением возможных лишних пробелов в конце последнего фрагмента.
Таким образом — на каждом предложении мы впустую используем максимум 19 байт :)


#4 Пользователь офлайн   n00ne 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 1 983
  • Регистрация: 27 Ноябрь 10
  • Сказали спасибо раз:
  • Страна:  

Отправлено 30 Сентябрь 2012 - 00:41

Schwein, ну тут как бы вообще нафига? ну и разбитие тоже нафига?))))))))))))


#5 Пользователь офлайн   Schwein 

  • –· ·– ···· ··– ·––– ··––··
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Модераторы
  • Сообщений: 14 868
  • Регистрация: 15 Сентябрь 10
  • Сказали спасибо раз:

Отправлено 30 Сентябрь 2012 - 01:07

n00ne
Чтоб жизнь мёдом не казалась :) Пошутил я.

А если серьёзно — blob'а должно хватить за глаза, только за индексацию, если она нужна, подумать дополнительно.


#6 Пользователь офлайн   Andreios 

  • Kill them all
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Старая гвардия
  • Сообщений: 6 390
  • Регистрация: 28 Июль 11
  • Сказали спасибо раз:
  • ГородСимферополь
  • Страна:  

Отправлено 30 Сентябрь 2012 - 06:49

char(20) - а чего именно 20? :)
ps
все тот же "деготь" в "медовой жизни"? ))


#7 Пользователь офлайн   Kit 

  • Mega poster
  • PipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 116
  • Регистрация: 17 Сентябрь 10
  • Сказали спасибо раз:
  • ГородСимферополь
  • Страна:  

Отправлено 30 Сентябрь 2012 - 12:01

Просмотр сообщенияn00ne (30 Сентябрь 2012 - 00:08) писал:

не совсем понятна задача. точнее совсем не понятна. зачем текст хранить в БД? и что Вы с ним хотите там делать?

Есть желание сделать ресурс для текстовых записей с идеологией svn. Правка текста в данном случае - это замена фрагмента на вновь созданный, при этом старый фрагмент остается в базе. Естественно, не хочется, чтобы "половина" объема БД осталась неиспользованной. Потому и стоит вопрос с типом поля данных.

to Schwein - не хочу бить по 20 символов. Видимо, буду бить по точкам и переводу каретки. Бить нужно, чтобы минимизировать повторяемость фрагментов. В принципе, самый "крутой" способ - разбить на слова пробелами.

Про индексацию - тут вообще головная боль, но это уже второй этап :)

Как бы так.

Спасибо, что я все ещё Kit!

#8 Пользователь офлайн   Schwein 

  • –· ·– ···· ··– ·––– ··––··
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Модераторы
  • Сообщений: 14 868
  • Регистрация: 15 Сентябрь 10
  • Сказали спасибо раз:

Отправлено 30 Сентябрь 2012 - 17:26

Kit
Ну так blob, насколько я помню, занимает при хранении данных n+2 байт на запись, где n — кол-во символов в записи. Т.е. с точки зрения хранения потерь почти нет.


#9 Пользователь офлайн   Kit 

  • Mega poster
  • PipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 116
  • Регистрация: 17 Сентябрь 10
  • Сказали спасибо раз:
  • ГородСимферополь
  • Страна:  

Отправлено 30 Сентябрь 2012 - 17:41

Спасибо, погуглю. На столь низком к БД уровне редко работаю, а привык продумывать по возможности все тонкие места :)

Спасибо, что я все ещё Kit!

#10 Пользователь офлайн   Gennadyi 

  • Живу здесь
  • PipPipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Старая гвардия
  • Сообщений: 6 771
  • Регистрация: 17 Сентябрь 10
  • Сказали спасибо раз:
  • ГородСимферополь
  • Страна:  

Отправлено 01 Октябрь 2012 - 23:29

http://ru.wikipedia.org/wiki/MUMPS

Не любо - не слушай, а врать не мешай !
", было бы величайшей ошибкой думать," © В. И. ЛЕНИН ПСС том 42, стр. 74

#11 Пользователь офлайн   alexk 

  • Dyslexic Devil Worshipper
  • Перейти к галерее
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Команда форума
  • Сообщений: 967
  • Регистрация: 16 Сентябрь 10
  • Сказали спасибо раз:
  • ГородБерлин
  • Страна:  

Отправлено 02 Октябрь 2012 - 11:08

PostgreSQL, обычный тип данных TEXT.

При размере текста до 128 байт - заголовок аттрибута данного типа занимает 1 байт
При размере больше 128 байт - заголовок занимает 4 байта, но может включаться компрессия (LZ), которая достаточно эффективна для текстовых данных.

Ну и обычный overhead любой СУБД - 24 байта на заголовок каждой страницы (8Кб) + 4 байта указатель на каждую строку + 24 байта заголовок каждой строки.

Размер индекса предсказать сложно, но в среднем где-то 1/10 - 1/5 от размеров таблицы при использовании btree индекса (есть еще GIN и GIST, которые могут лучше подходить для текстовых данных, особенно в случае полнотекстового поиска).

Размер исходных данных еще зависит от их кодировки, латинские буквы в большинстве кодировок представляются одним байтом, а вот кириллица как правило в UNICODE кодировках, таких как UTF-8, занимает 2 байта, поэтому если стоит задача максимально экономного хранения русского текста - я бы взял однобайтовую кодировку, скажем KOI8-R (нужно указать initdb при инициализации базы).

Возможно не стоит средствами СУБД делать систему контроля версий, а посмотреть на уже работающие SVN, GIT + WebDAV для доступа (или, если хранить репозиторий на сервере, обычный CGI скрипт, запускающий клиента напрямую)?

Помимо реляционных есть еще документно-ориентированные СУБД (MongoDB, CouchDB): http://en.wikipedia....iented_database, возможно они лучше подойдут для данной задачи, если отдельные данные, хранящиеся в таблице, не связаны или слабо связаны между собой.

Come as you are.

#12 Пользователь офлайн   Kit 

  • Mega poster
  • PipPipPipPip
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
  • Группа: Активный участник
  • Сообщений: 116
  • Регистрация: 17 Сентябрь 10
  • Сказали спасибо раз:
  • ГородСимферополь
  • Страна:  

Отправлено 15 Октябрь 2012 - 11:05

Спасибо за ответы. Многое прояснилось.

Использовать сторонние сервисы SVN не хотелось бы, поскольку возлагаемая на ресурс задача (хранение информационных статей) вполне решаема его ресурсами. Скорее всего на роль хранилища данных возьму постгрес.

Спасибо, что я все ещё Kit!

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей