Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Взаимосвязь обьема от структуры базы

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
yok

Участник тусовки


Зарегистрирован: 06.02.2008
Сообщения: 260
Откуда: krasnodar

СообщениеДобавлено: Чт Мар 18, 2010 10:00 am    Заголовок сообщения: Взаимосвязь обьема от структуры базы
Ответить с цитатой

Добрый день ДЕН И ДЕНЧАНЕ.

Пишу все что связано с регистрацией. Впервые и самостоятельно. И возник вопрос.

После приема данных из формы регистрации, сохраняются временные данные в базе, чтобы после подтверждения пользователем в течении 24, они изменили статус на постоянный.

Ясно что таблица и в ней , поля логин, пароль , мыло.
Теперь временные данные(точнее пока это все временные и логин и пароль и мыло), какой то хеш, который должен совпасть с возвращенным от пользователя. Значит нужно создавать поле для этого хеша.
Поле этого хеша будет достаточно обьемным.
После подтверждения содержимое поля хеша удаляется, но поле то само остается.!!!!
Теперь проверка уже постояного , искать запись в которой пустое поле хеша, или же создавать поле в котором флаг уже постоянного пользователя.

И вот получается нужно два поля, для хеша и флага.

Как то нерационально получается.
Мало того что пустое поле хеша будет присутствовать, (и вопрос это же как то на обьеме отражается или на производительности???), а еще его проверять, или по флагам пробегаться.

Как то не так, а оптимизация.
Хотелось бы мнение знающих людей.
Спасибо.

Не задумывался не кто, для временных, свою таблицу, тогда таблица уже пользователей будет без этого поля, а ведь ее со временем однозначно будут ALTER

и контроль временных легче, и доступ и производительность.
Если подтверждение временного, пробежаться по временной очень быстро, и удалить старые, а по тоже по постоянным, уже морока, а потом только внести в постоянную, и потом не нужен поиск флага,
ведь поиск
SELECT *
намного быстрее чем
SELECT `flag`

Есть мнения???
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Мар 18, 2010 10:19 am    Заголовок сообщения:
Ответить с цитатой

Поле для хэша занимает аж 32 байта, char(32), а поле для флага - char(1). Вот и вся оптимизация
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
yok

Участник тусовки


Зарегистрирован: 06.02.2008
Сообщения: 260
Откуда: krasnodar

СообщениеДобавлено: Чт Мар 18, 2010 10:56 am    Заголовок сообщения:
Ответить с цитатой

Ден спасибо за ответ.

Но меня конкретно интересует вот что, после подтверждения, содержимое поля хэша удаляю, но само то поле остается.
И получается на 1000 подтвержденных 1000 полей пустых. Структура на 1000 ячеек больше, и даже если они пусты, они занимают какой то обьем??? или вот в частности если у поля char(32), то значит даже если они пустые, то вес дополнительный 32 * 1000, так что ли , или просто структура больше а вес не добавляется пока пустые поля???
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Мар 18, 2010 11:28 am    Заголовок сообщения:
Ответить с цитатой

32 * 1000 = 32 Кбайта, * 10 000 = 320 Кбайт. Это что много???? В крайнем случае всегда можно удалять пользователей, которые не заходили на сайт, скажем, последние полгода, что позволит уменьшить к-во записей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
yok

Участник тусовки


Зарегистрирован: 06.02.2008
Сообщения: 260
Откуда: krasnodar

СообщениеДобавлено: Чт Мар 18, 2010 12:22 pm    Заголовок сообщения:
Ответить с цитатой

Спасибо ДЕН, огромное, за свет в конце тонеля.
Значит, даже на пустые ячейки типа char(32), выделяется 32байта, и они суммируются, а не просто что могут быть выделены. Они есть, хоть пусто, хоть есть что.
И вот как раз мысль о поле времени последнего входа пользователя.

Огромное спасибо ДЕН. Idea
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Мар 18, 2010 12:43 pm    Заголовок сообщения:
Ответить с цитатой

Не за что!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
yok

Участник тусовки


Зарегистрирован: 06.02.2008
Сообщения: 260
Откуда: krasnodar

СообщениеДобавлено: Пн Мар 22, 2010 11:54 am    Заголовок сообщения:
Ответить с цитатой

Здравствуйте жители ДЕНЧАНИИ.

Делаю регистрацию, поэтому мускул разбираю, и не дают мне покоя некоторые вопросы.
И что интересно, никому они не интересны, всех волнуют общие вопросы, а я как больной не нахожу покоя.

И вот допустим , для регистрации всего одна таблица. ОДНА. ИМенно.

И вот первый вопрос 1, если таблица одна, и выборка идет по логину, зачем нам индекс, и само поле вообщето id INT,
мало того, что оно есть вес, плюс еще и индекс автоматически на нем формируется.
Почему не назначить индекс по логину. Разумней , оптимальней. Про индексы я из Дена книги вычитал. Да и увидел в локалхосте.

2 вопрос. Поле date 3 байта, поле timestamp 4байта. Вобще ресурсозатраты на запрос вероятно заточенный под INTERVAL, от timestamp , меньше чем сравнение с date.

2 вопрос это как бы познавательный. А вот 1 почему то даже оправданный, лишнее поле int , и не необходимое, по которому формируется индекс. НЕРАЗУМНО ПОЛУЧАЕТСЯ.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
yok

Участник тусовки


Зарегистрирован: 06.02.2008
Сообщения: 260
Откуда: krasnodar

СообщениеДобавлено: Вт Мар 23, 2010 7:05 am    Заголовок сообщения:
Ответить с цитатой

Я был прав когда сомневался, индекс по префиксу решает проблему, вот только опять
МЕНЯ ТЕРЗАЮТ СОМНЕНИЯ
"у .... магнитофон, у посла медальон"
ну а если серьезно то как затратно и отличие по весу и ресурсозатратам индекс по префиксу от простого.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вт Мар 23, 2010 10:27 am    Заголовок сообщения:
Ответить с цитатой

Цитата:

мало того, что оно есть вес, плюс еще и индекс автоматически на нем формируется.
Почему не назначить индекс по логину. Разумней , оптимальней. Про индексы я из Дена книги вычитал. Да и увидел в локалхосте.

Согласен. Если тебе не нужна привязка к логину, то можешь убрать поле iD и строить все по логину. Но возникают траблы
1) пользователи иногда вместо логина указывают хз что. потом с этим нужно работать. в частности, проверять на вражеский код и т.д. а когда есть ИД, то чтобы юзер не написал в качестве логина - это не твои проблемы. Это его проблемы - ведь ему и только ему придется вводить этот логин в браузер. А ты будешь работать с числом, которое автоматически сгенерировала система.
2) оптимизация. Допустим, есть таблица сообщений такого формата:
Отправитель Получатель Сообщение

Если в качестве Отправителя и Получателя - числа, то размер БД займет меньше, чем два поля varchar(255)

Цитата:

2 вопрос. Поле date 3 байта, поле timestamp 4байта. Вобще ресурсозатраты на запрос вероятно заточенный под INTERVAL, от timestamp , меньше чем сравнение с date.

Тут уже как тебе будет удобнее.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
yok

Участник тусовки


Зарегистрирован: 06.02.2008
Сообщения: 260
Откуда: krasnodar

СообщениеДобавлено: Вт Мар 23, 2010 11:32 am    Заголовок сообщения:
Ответить с цитатой

Но возникают траблы
1) пользователи иногда вместо логина указывают хз что. потом с этим нужно работать.

О ДЕН, вот спасибо за ответ, об этом я не подумал, как сам индекс работает с содержимым поля. Возможен ли ущерб если хз данные.
СПАСИБО ДЕН Idea
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вт Мар 23, 2010 11:33 am    Заголовок сообщения:
Ответить с цитатой

не за что
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Вт Мар 23, 2010 12:01 pm    Заголовок сообщения:
Ответить с цитатой

yok, проблема с автоувеличением ID решается легко же: просто сделать ID как "id int AUTO_INCREMENT". Затем, если, например, есть таблица "sometable ( id int AUTO_INCREMENT,login varchar(30),password varchar(30), PRIMARY KEY(id));", то добавлять записи нужно так:
Код:
INSERT INTO sometable VALUES(0,"login1","password1");
INSERT INTO sometable VALUES(0,"login2","password2");
INSERT INTO sometable VALUES(0,"login3","password3");


В результате будет:

id login password
------------------------------
1 login1 password1
2 login2 password2
3 login3 password3

Я сейчас социалку пишу, очень удобно с id работать - проверка простая и нет подводных камней (иньекция в код и т.п.)
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
yok

Участник тусовки


Зарегистрирован: 06.02.2008
Сообщения: 260
Откуда: krasnodar

СообщениеДобавлено: Пт Апр 16, 2010 6:40 am    Заголовок сообщения:
Ответить с цитатой

Anderson, о спасибо за внимание. Вопрос был совсем в другом. О префиксе. Но спасибо за полный ответ, скоректирую его только по синтаксису

INSERT INTO `anytable` VALUES(' ".mysql_real_escape_string($login)." ',' ".next." ') ;

Да и еще раз пароль это всегда md5 хеш, то 32 знака всегда, поэтому лучше CHAR(32) not VARCHAR(32)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис