Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2015, 18:13   #11
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Возможно, стоит таки заняться изучением SQL.
Конечно стоило бы, но у меня пока что в планах нету сильной надобности полного изучения ввиду редкого использования.

Все таки это, наверное, не то что я хотел сделать.

Я могу сразу найти совпадение ip и логин этого совпадения из таблицы:
Код:
SELECT login FROM check_3 WHERE ip ='$ip'
Я хотел сравнить производительность запроса в другом варианте, что я и описывал.

то есть вместо поиска ip по сотням-тысячам значений в INT(10), сначало поиск по 1-15 вариантам loginoв во всей таблице (больше вариантов там не будет) т.е находим все ip соответствующие известному loginу, а далее из имеющихся ip найти известный, если он там есть вообще.
т.е:
Код:
SELECT ip FROM check_3 WHERE ip ='$login'
А далее наверно обработать php или как то в одном запросе сделать.
Т.е. результаты то получатся одинаковые, но способы разные.

Предполагается большое количество запросов такого рода.

Последний раз редактировалось Illusiony; 26.01.2015 в 18:28.
Illusiony вне форума Ответить с цитированием
Старый 26.01.2015, 18:33   #12
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Код:
SELECT login FROM check_3 WHERE ip ='$ip'
Код:
SELECT ip FROM check_3 WHERE ip ='$login'
WTF?
То ip ='$ip', то ip ='$login' ..?

Тебе нужно найти совпадение пары «логин + IP» – так и запрашивай именно такое совпадение в условиях запроса.
Ты сам себе морочишь голову на ровном месте.
Andkorol вне форума Ответить с цитированием
Старый 26.01.2015, 18:43   #13
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
WTF?
То ip ='$ip', то ip ='$login' ..?

Тебе нужно найти совпадение пары «логин + IP» – так и запрашивай именно такое совпадение в условиях запроса.
Ты сам себе морочишь голову на ровном месте.
Ну да, только в первом варианте достаточно просто искать ip найду логин.
Это я сделал:
Код:
SELECT login FROM check_3 WHERE ip ='$ip'
Вот хотел потестить второйвариант. Так как мне важна скорость.

вариант1) поиск по ip INT(10) Primary key
вариант2) поиск по login VARCHAR(8)
INDEX(`login`(8))
вариантов логинов в таблице от 1-15 ( поторяются одинаковые) то есть если в среднем около 400 одинаковых логинов на всю таблицу если в таблице около 6000 записей.
а потом из этих средних 400 нахождение ip

Все это нужно только для сравнения производительности.
Ведь во втором случае:
недостатки: поиск по текстовому полю, хоть и индексированнному
плюсы: поиск по 1-15 вариантам сначало.

А потом по приблизительно 400 по ip

Вам возможно это сразу без тестов будет ясно либо по 6000 записям INT(10) поиск, либо поиск из двух частей по login VARCHAR(8) до 15 вариантов в таблице( в сумме средне до 400 примерно)
INDEX(`login`(8)), а потом из этих 400 поиск по ip

Последний раз редактировалось Illusiony; 26.01.2015 в 18:48.
Illusiony вне форума Ответить с цитированием
Старый 26.01.2015, 18:53   #14
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
вариант1) поиск по ip INT(10) Primary key
Primary key подразумевает уникальность значений.
Уникальность IP, как такового, в данном случае – вызывает серьёзные сомнения.
Вот эти твои страдания – это яркий пример оптимизации там, где никакая оптимизация не нужна, совсем.
Andkorol вне форума Ответить с цитированием
Старый 26.01.2015, 19:18   #15
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

оно в базу вставится только если такого нету. так что он там будет уникальным
Illusiony вне форума Ответить с цитированием
Старый 26.01.2015, 19:26   #16
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
оно в базу вставится только если такого нету. так что он там будет уникальным
Т.е. если с одного IP (офисная сеть, например) зайдет несколько пользователей с разными логинами – то твоя система тупо запишет только первого из них, а остальные побоку?
Серьёзная статистика намечается.
Andkorol вне форума Ответить с цитированием
Старый 26.01.2015, 19:35   #17
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Для моей задачи это не особо критично. А по другому идентифицировать будет проблематично.
Illusiony вне форума Ответить с цитированием
Старый 26.01.2015, 19:49   #18
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Задача-то какая? Что вы изобрести пытаетесь?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.01.2015, 20:06   #19
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Да ничего особенного. Возможно я и ошибаюсь, просто нужно сделать быстро, а учитывая мои скуднейшие знания, сделать по "человечески", в том смысле как настоящий программист у меня и так не получится.
Задача:
В одной популярной онлайн игре ( клиентская чать игры) . Чтобы все желающие могли голосовать за выбор одного из 3х пунктов и всего 30-31 выбор на 1 колоду(это карточная онлайн игра). Будет клиентская часть на delphi 7 ( потомучто тока с ней знаком, планирую изучение WPF или аналога ). Реализовал сам выбор и должно быть не сложно связь с сервером.
Человек который допускает людей к голосованию в своей игре регистрируется на сайте, получает ссылку для того чтобы дать ее всем желающим. Вот желающие заходят по ссылке без регистрации и голосуют. Тут то и проверяется их ip, чтобы они не голосовали более 1 раза за ход. Теоритически совпадений по ip должно быть немного, если и будут не особо кретично, ктото не проголосует.
Но в некоторые моменты при наиболее активном голосовании, за малое время, может пойти много запросов, Вот я и стараюсь найти более менее быстрый способ организации.
Не знаю на сколько быстрее будет, если таблицу с голосование сделать MEMORY ( не путать таблицу с регистрацией, она точно будет на SSD) . Но и к тому же Memory свои особенности. Но может быть если чтото получится буду думать над дальнейшей оптимизации. А сервер VDS собираюсь покупать на год за 50-100USD и на нем еще всякие эксперименты планирую делать.
Это только мой первый опыт VDS и такого "проектика".
Я весь "зеленый" и поэтому и ошибок и всякого может быть.

Программа на delphi будет с заданной периодичностью опрашивать сервер, обнулять данные по голосованию и соответственно обнулять записи соответствующие данному логину, соответственно и id только по данному логину.А логинов в таблице зарегистрированнных вот это и число от 1 до 15 ( конечно может будет и больше) это и есть зарегистрированные, те кто будут давать ссылку на голосование.
Через куки, получается человек может отдельно взять браузер в настройках поставить не оставлять куки и будет голосовать до бесконечности.

Вот и VPS параллельно подбираю, есть пост в разделе Свободное общение.
Если кто знает на опыте какая разницы в производительности между SSD и MEMORY при MySql запросах. Я конечно понимаю это зависит от статистики запросов и организации самих таблиц но все таки. Предпологается большое количество SELECT, а также INSERT( по 1 записи за раз), гораздо реже DELETE(сдесь пакетно удалятся все записи по голосованию до нескольких сотен( возможно и до пару тысяч).

Последний раз редактировалось Illusiony; 26.01.2015 в 20:20.
Illusiony вне форума Ответить с цитированием
Старый 26.01.2015, 20:44   #20
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Цитата:
Все это нужно только для сравнения производительности.
Ведь во втором случае:
недостатки: поиск по текстовому полю, хоть и индексированнному
плюсы: поиск по 1-15 вариантам сначало.
Поверьте, по индексируемому полю, даже текстовому, выборка будет происходить очень быстро. Тем более, вашу таблицу можно будет подчищать, например, раз в сутки от устаревших данных. Чтобы не разрасталась со временем. Например удалять записи которым больше месяца. Так, что не морочьте голову, mysql вам вполне подойдет для этой цели и никакой оптимизации не нужно.
Gorychev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли применить функцию format в таком случае? XE5 Общие вопросы Delphi 14 01.05.2014 03:20
Как сделать чтобы через форму можно было принимать почту и в таком формате - info@robot-robot. rafshm PHP 7 11.01.2013 13:00
как авторизоваться в таком случае? grafgrial Общие вопросы Delphi 2 19.09.2011 21:38
MySQL, dbExpress, Не работает Select lexastik БД в Delphi 0 02.09.2011 17:43
Как Firefox рассчитывает ширину столбцов вот в таком случае??? Finer HTML и CSS 3 26.04.2008 16:47