|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Будет таблица, в которой будут заноситься данные пользователей. Поиск пользователя будет идти не по логину , а по 32 символьной строке (уникальной для каждого). Данных будет много. Как лучше сделать , чтобы поиск не был слишком медленный? Критичен именно поиск, т.к. выборка будет идти очень часто, добавление реже. Тип думаю задать CHAR(32), а дальше что? Нужен ли идентификатор UNIQUE или лучше со скрипта проверять, есть ли такая запись в базе или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 01:41 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgotКак лучше сделать , чтобы поиск не был слишком медленный? Делать уже ничего не надо. В процессе обеспечения "уникальности для каждого" созданный unique constraint создаст индекс автоматически. PS: С "добавлением реже" тебе до "данных много" ещё лет сто пахать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 02:22 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
UNIQUE это Constraint а не идентификатор. Constraint используется to enforce data integrity на уровне таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 05:50 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot Будет таблица, в которой будут заноситься данные пользователей. Поиск пользователя будет идти не по логину , а по 32 символьной строке (уникальной для каждого). Данных будет много. Как лучше сделать , чтобы поиск не был слишком медленный? Критичен именно поиск, т.к. выборка будет идти очень часто, добавление реже. Тип думаю задать CHAR(32), а дальше что? Нужен ли идентификатор UNIQUE или лучше со скрипта проверять, есть ли такая запись в базе или нет? У вас логин и так является строкой по сути. Или вы этого не видите, или занимаетесь ерундой. Меняйте длину строки на нужную и не изобретайте велосипед. И да, уникальность должна проверяться автоматом (ставим галочку), а не кривописными скриптами. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 13:37 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Если вы пытаетесь закидывать туда данные сторонней системой то добавьте уникальное поле вашей длины по которой и находите пользователя. Это к тому что за логин из 32 знаков пользователи вас на кол посадят. Эх, праздники тормозят мой мозг. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 13:48 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Не могу грамотно объяснить. Это не логин, это уникальный ID , который генерируется скриптом на основе некоторых данных. Попросту говоря - защита от клонов и ботов, подробнее см. fingerprint.js . Не суть. Нужно искать именно по этим "отпечаткам", проверять нет ли в базе повторов (клонов), если есть - выбрать кто это (что за юзер, какие там были данные). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 15:10 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot, Ну тогда "добавьте уникальное поле вашей длины по которой и находите пользователя". Если БД позволяет делать поле уникальным, то ставим галочку на уникальность. Иначе при записи строки вставляем сою проверку на уникальность. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 15:44 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Злой Бобр, у меня MySQL (или Мария), вроде разницы нет. По уникальности понял, а как по быстродействию - будет долго искать по строкам, может сортировка какая-то нужна или еще как оптимизировать? В плане, я понимаю что базе проще сделать выборку вида ID == 50, особенно если по числах отсортировано, чем перебрать все строки и сравнивать каждую. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 16:01 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgotВ плане, я понимаю что базе проще Нет, ты ничего не понимаешь. Поэтому не думай. Тормоза в твоей системе будут не от базы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 16:12 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, да, я не понимаю, но подскажите как грамотно спроектировать-то. Чтобы потом не переделывать. Вот есть идентификатор 32 символа, поиск по нему. Как лучше сделать таблицу? База - MySQL /MariaDb ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 17:19 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot Вот есть идентификатор 32 символа Похоже в этом и есть проблема, если бы знать предысторию появления этого идентификатора, то наверняка нашелся бы обходной путь по проще и скорее всего не один... morgot Данных будет много. не думаю, что их больше чем товаров всех видов во всех странах, которые вписываются в EAN-13... Всего 13 ЦИФР описывают весь товар в мире, причем последняя сумма - это контрольная сумма предыдущих 12-ти... Первые две - Код страны, ну и т.д. Это я так в качестве намёка... 13 хоть и только цифр- тоже приличное поле для поиска, но таки не 32... Подойдите к идентификатору с другой стороны и если получится его сократить или убрать, то тому кто его придумал - просто оторвите ноги... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 18:14 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgotподскажите как грамотно спроектировать-то. Чтобы потом не переделывать. Вот есть идентификатор 32 символа, поиск по нему. Как лучше сделать таблицу? Для начала - в точности как написано в любом учебнике для начинающих: поле VARCHAR и индекс на него. О том "чтобы потом не переделывать" лучше забудьте. В любом случае переделать придётся не раз и не два. Это неизбежно в ходе взросления. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 18:19 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot Dimitry Sibiryakov, да, я не понимаю, но подскажите как грамотно спроектировать-то. Чтобы потом не переделывать. Вот есть идентификатор 32 символа, поиск по нему. Как лучше сделать таблицу? База - MySQL /MariaDb 32 - это значит md5-отпечаток, скорей всего (а если нет, то что мешает?) значит тип поля - под hex (MySQL научился hex? А MariaDB? Или там до сих пор всё в чарах...) а чтобы быстрей искало и меньше занимало, можно отдельное поле для индекса, размером 10, например varchar нафиг не нужен на поле, где всегда 32 символа. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 18:44 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot Злой Бобр, у меня MySQL (или Мария), вроде разницы нет. По уникальности понял, а как по быстродействию - будет долго искать по строкам, может сортировка какая-то нужна или еще как оптимизировать? В плане, я понимаю что базе проще сделать выборку вида ID == 50, особенно если по числах отсортировано, чем перебрать все строки и сравнивать каждую. Как выше уже писали - зачем вам 32 знака для поиска? Потому как у вас явно тараканы в голове человека который придумал такую хрень. Я могу понять алгоритм найти пользователя, сравнить его 32 значное поле (ставить индекс не нужно) на условие. Но находить пользователя по 32 значному строковому полю (поле индексируемое) - в любой БД это путь в никуда (в плане быстродействия). Так что начните с постановки задачи. Например я считаю что поля Int 8 знаков для поиска именно по полю - вполне за глаза. Индекс по нему летает. Задачу в студию . Мы поможем правильный алгоритм сделать, а не такого монстрика. С марией я не работал, так что делайте поправку. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 20:46 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Злой БобрНо находить пользователя по 32 значному строковому полю (поле индексируемое) - в любой БД это путь в никуда (в плане быстродействия). То есть Вы вот так заявляете, что в любой СУБД поиск по ФИО, например, будет тормозить чисто из-за его длины при любом типе индекса? Или это только у MS SQL всё так запущенно?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 21:25 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, У Бобра ключевое Злой Бобр Задачу в студию . - объемов нет (данных будет много - это ни о чем, одному и трех баб мало, другому и кобыла невеста...) - ну и ключ в 32 символа - это перл, заслуживающий особого внимания и рассмотрения... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 22:09 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
vmagну и ключ в 32 символа - это перл, заслуживающий особого внимания и рассмотрения... Это ты ещё не видел таблиц с ключами из трёх полей, одно из которых double precision... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 23:19 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Это ты ещё не видел таблиц с ключами из трёх полей, одно из которых double precision... после этих слов я наверно должен был испугаться и выронить на пол глаза? с дуру можно и инструмент сломать... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 23:54 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Это ты ещё не видел таблиц с ключами из трёх полей, одно из которых double precision... Ха! Из трёх. Я до сих пор вспоминаю базу "Снежной королевы", там были составные естественные ключи вплоть до 12 (!) полей. morgot Будет таблица, в которой будут заноситься данные пользователей. Поиск пользователя будет идти не по логину , а по 32 символьной строке (уникальной для каждого). Данных будет много. "Много" - это сколько? Если пользователей будет меньше ста миллионов - достаточно позаботиться о том, чтобы не сделать совсем уж явной фигни в программном коде, который работает с этими данными. Тогда всё будет в порядке. morgot Злой Бобр, у меня MySQL (или Мария), вроде разницы нет. Ну тогда может не ста миллионов а миллиона. Не работал с ними, не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 23:58 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot (уникальной для каждого). Данных будет много. Как лучше сделать , чтобы поиск не был слишком медленный? morgot у меня MySQL (или Мария) Тип данных, правда, дает некоторые сомнения, но для начала сойдет и CHAR(32). Если покажете реальные значения, которые там предполагается хранить, то может еще чего присоветуем. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 00:19 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Чувствую щас ТС скажет, что уникальная строка 32 символа это ИНН+СНИЛС+Серия/номер паспорта для верности... ну или что это был абстрактный пример и на самом деле нужно вести учет не юзеров, а небесных тел соседних галактик... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 00:59 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Много - не больше миллиона, тысяч 100-900, не знаю. Dimitry Sibiryakov Для начала - в точности как написано в любом учебнике для начинающих: поле VARCHAR и индекс на него. индекс - так пойдёт? Код: sql 1. 2.
miksoft Сделайте это поле первичным ключом. Будет и скорость, и уникальность. Тип данных, правда, дает некоторые сомнения, но для начала сойдет и CHAR(32). Если покажете реальные значения, которые там предполагается хранить, то может еще чего присоветуем. Первичным? Думал, что в базах данных всегда желательно первичным делать INT , т.к. в нем auto increment, и вроде как база сама создает такое значение, если не указать явно? или путаю? задачу напишу ниже. Злой Бобр Задачу в студию . Мы поможем правильный алгоритм сделать, а не такого монстрика. С марией я не работал, так что делайте поправку. Задача. Есть веб сайт (форум,соц. сеть, не суть). Для каждого пользователя генерируется уникальный идентификатор на основе данных браузера и подобного. Он выходит размером 32 символа. Уменьшить или изменить его нельзя. Перевести на смс-активацию, привязку к айпи и т.д. тоже нельзя. Только вот уникальный айди, который генерится особым образом, практически не дает коллизий и сбоев. Допустим, на сайте сидят 100 тыс человек, регится 100001ый . Нужно проверить, не является ли он клоном кого-то из этих товарищей . Исходя из этого, нужно спроектировать таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 18:08 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgotМного - не больше миллиона, тысяч 100-900, не знаю. 100 тысяч пользователей... Ещё один фейсбук создаёшь? morgotВ учебниках советуют CHAR, если данные фиксированной длины Если ты АБСОЛЮТНО уверен. Ну и для поля фиксированной длины твой default выглядит странно, ведь он короче этой длины. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 18:23 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot Задача. Есть веб сайт (форум,соц. сеть, не суть). Для каждого пользователя генерируется уникальный идентификатор на основе данных браузера и подобного. Он выходит размером 32 символа. Уменьшить или изменить его нельзя. Перевести на смс-активацию, привязку к айпи и т.д. тоже нельзя. Только вот уникальный айди, который генерится особым образом, практически не дает коллизий и сбоев. Допустим, на сайте сидят 100 тыс человек, регится 100001ый . Нужно проверить, не является ли он клоном кого-то из этих товарищей . Исходя из этого, нужно спроектировать таблицу. Я уже напуган. Неужели браузер в самом обычном HTTP передает что-то такое, что позволяет меня прямо уникально-уникально идентифицировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 18:37 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov morgotМного - не больше миллиона, тысяч 100-900, не знаю. 100 тысяч пользователей... Ещё один фейсбук создаёшь? morgotВ учебниках советуют CHAR, если данные фиксированной длины Если ты АБСОЛЮТНО уверен. Ну и для поля фиксированной длины твой default выглядит странно, ведь он короче этой длины. 1. нет, это скажем так, тематическое сообщество. не суть, не буду тут рекламить. просто проблема в том, что если раньше были флеш куки, да и проверка по айпи помогала, то сейчас только такой вариант помогает от клонов. 2. длина ВСЕГДА будет 32 символа. Ну может со временем протокол поменяется, но вряд ли. 3. DEFAULT '' - это автоматом создалось, не знаю что туда писать, можно и NULL в принципе, т.к. это поле не может быть пустым (скрипт так или иначе отработает, а если нет - то это уже за рамками баз данных). fkfka2 Я уже напуган. Неужели браузер в самом обычном HTTP передает что-то такое, что позволяет меня прямо уникально-уникально идентифицировать? в http нет, но сам браузер - да. Изучите например это https://habr.com/ru/company/cloud4y/blog/548924/ есть что скрывать - юзайте тор браузер, при этом никогда не разворачивайте на полный экран, желательно через tails / whonix (опять же, это все за рамками баз данных). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 19:01 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot Допустим, на сайте сидят 100 тыс человек, регится 100001ый . - то есть предполагается, что логин и пароль как у нормальных людей таки присутствуют, раз всё таки "регится".... - нужно только дополнительно хранить "пачпорт" для выявления клонов ? Ну тогда можно хранить не 32 символа, а их контрольную сумму, хорошие алгоритмы с вероятностью повтора хотя бы 1 на 65 000 комбинаций приведут 32 символа к такому типу суммы АF03E (максимум 5 символов), их и хранить за юзером... Алгоритм простой - засуммировал 32 символа от нового юзера, получил их сумму и ищешь именно эту сумму среди существующих, не нашел - записал нового юзера и его сумму в БД, нашлась сумма - принимай меры что хотел... Как сделаешь, дай ссылку сайта на почту (в профиле есть) я зарегистрируюсь раз 5 и пришлю тебе свои логины... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 19:01 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgotDEFAULT '' - это автоматом создалось, не знаю что туда писать, можно и NULL в принципе Вот поэтому скрипты создания таблиц надо писать ручками, а не мышкой натыкивать. Просто убери этот DEFAULT вообще. morgotв http нет, но сам браузер - да Телепатически, не иначе... После выпиливания FTP, HTTP осталось единственным протоколом, поддерживаемым браузерами и, соответственно, единственным способом что-то передать на сервер. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 19:20 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
vmag Ну тогда можно хранить не 32 символа, а их контрольную сумму, хорошие алгоритмы с вероятностью повтора хотя бы 1 на 65 000 комбинаций приведут 32 символа к такому типу суммы АF03E (максимум 5 символов), их и хранить за юзером... Dimitry Sibiryakov morgotв http нет, но сам браузер - да Телепатически, не иначе... После выпиливания FTP, HTTP осталось единственным протоколом, поддерживаемым браузерами и, соответственно, единственным способом что-то передать на сервер. Вычисление параметров браузера идет не по протоколу хттп, не так выразился - не в плане что заголовки какие-то берутся или еще что. А JAVASCRIPT получает параметры браузера (шрифты, экран, и т.д. и т.п.). Без яваскриптов толку крайне мало, один юзерагент, который меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 19:46 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot Вычисление параметров браузера идет не по протоколу хттп, не так выразился - не в плане что заголовки какие-то берутся или еще что. А JAVASCRIPT получает параметры браузера (шрифты, экран, и т.д. и т.п.). Без яваскриптов толку крайне мало, один юзерагент, который меняется. Ну хорошо. У меня экран 3840х2160. Что это даст в решении задачи "отличи клона"? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 20:02 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
fkfka2, это уже другая тема... ТС у интересно только как спрятать и потом найти 32 символа 100 тыщ раз... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2022, 20:10 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot Задача. Есть веб сайт (форум,соц. сеть, не суть). Для каждого пользователя генерируется уникальный идентификатор на основе данных браузера и подобного. Он выходит размером 32 символа. Уменьшить или изменить его нельзя. Перевести на смс-активацию, привязку к айпи и т.д. тоже нельзя. Только вот уникальный айди, который генерится особым образом, практически не дает коллизий и сбоев. Допустим, на сайте сидят 100 тыс человек, регится 100001ый . Нужно проверить, не является ли он клоном кого-то из этих товарищей . Исходя из этого, нужно спроектировать таблицу. на уровне приложения - это всё медленно и уронит сайт при наплыве ботов. Надо выносить хотя бы в Nginx, а лучше в iptables. А ещё, это всё полная ерунда, и против нормальных ботов не сработает. Там прокси и полностью рандомные браузерные данные. Вот простое решение, которое пришло на ум: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 00:27 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov После выпиливания FTP, HTTP осталось единственным протоколом, поддерживаемым браузерами и, соответственно, единственным способом что-то передать на сервер. scp ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 00:27 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
morgot miksoft Сделайте это поле первичным ключом. Будет и скорость, и уникальность. Тип данных, правда, дает некоторые сомнения, но для начала сойдет и CHAR(32). Если покажете реальные значения, которые там предполагается хранить, то может еще чего присоветуем. Первичным? Думал, что в базах данных всегда желательно первичным делать INT , т.к. в нем auto increment, и вроде как база сама создает такое значение, если не указать явно? или путаю? Технически, конечно, никто не запрещает сделать и автоинкрементный INT, а на ваш CHAR(32) наложить отдельный индекс с уникальностью. Но зачем, когда можно совместить? И выборка будет быстрее идти, т.к. прочитать запись из таблицы по первичному ключу будет быстрее,чем сначала получить первичный ключ из индекса, а потом все равно читать таблицу по первичному ключу. Комментарий для остальных - в MySQL основной тип таблиц на текущий момент - это InnoDB, а у него все таблицы являются IOT в терминах Оракла. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 00:43 |
|
Спроектировать таблицу, если выборка по строкам
|
|||
---|---|---|---|
#18+
бабушкин зайчикscp Какой браузер его поддерживает? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 01:24 |
|
|
start [/forum/topic.php?all=1&fid=32&tid=1539763]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 456ms |
0 / 0 |