SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

Помощ за структура на БД

ted

New member
Здравейте.
Имам един въпрос по структуриране на БД за MySQL
Знам по принцип как да го направя, но очаквам базата бързо да се разрасне - по около 10 000 записа дневно а искам да пазя архив за една година и искам да консултирам как да структурирам базата за да товари най малко сървъра при проверки.

Искам да дам на всяко IP достъп до определена функция по веднъж на ден.

-Първият ми вариант на базата е да записвам IPто деня, месеца и годината в отделни полета тип int и при опит за достъп до функцията да прави проверка дали за този ден, месец и година има записано това IP
-Сега си мисля дали не е по добре да записвам датата като едно число в едно поле, например 2008717 и да проверявам дали това IP го има с това число ...

А може да има и по добро решение за което не се сещам ...

Интересува ме и за да улесня индексирането по параметрите които ми трябват какъв тип полета трябва да ползвам и кои да са Index и т.н. ...

Надявам се да сте разбрали какво питам :) понеже от програмиране почти нищо не разбирам - гледам готов код и се опитвам да разбера как работи и как да го адаптирам за собствени нужди ...

Благодаря.

Сега по скайпа един приятел ме съветва IPто да го обърна с ip2long() и да го запиша и него в поле INT ...
 
Последно редактирано:
Re: Помощ за структура на БД

Искам да дам на всяко IP достъп до определена функция по веднъж на ден.
определена функция е много мъгляво понятие. ако са фиксиран малък брой е най ефективно да са полета с флагове(tinyint) ако е само една фукцията нямаше нужда да го споменаваш а ако са много ще ти трябва по запис за всяка една за деня и ИП-то


-Сега си мисля дали не е по добре да записвам датата като едно число в едно поле, например 2008717 и да проверявам дали това IP го има с това число ...
направо предприеми страшно радикалната стъпка да си записваш linux timestamp(INT), както правят всички ;)
пример: $today = mktime(0,0,0,date('m'),date('d'),date('Y'));


Интересува ме и за да улесня индексирането по параметрите които ми трябват какъв тип полета трябва да ползвам и кои да са Index и т.н. ...
ще ти трябва индекс по двете полета уникален може и за primary да го ползваш. то за такава таблица индекса ще ти е по голям от данните всъщност ама без него умираш.




Сега по скайпа един приятел ме съветва IPто да го обърна с ip2long() и да го запиша и него в поле INT ...
правилно ти е казал. само имай предвид да ползваш unsigned int или int64 че иначе ще ти се получават странни резултати.
 
Re: Помощ за структура на БД

Задължително и двете трябва да са числа и index-и. Както са ти написали по-горе timestamp и int64 ще ти сваршат идеална работа :)

Друго, което си мисля е дали няма да е проблем това, че филтрираш по IP, т.е да не се получи няколко юзера да влизат от едно IP.. не всеки в BG има реално IP а и да има може цяла фирма да стои зад него :)

Още нещо се сетих, необходимо ли е да се пазят даните за минали дати, не става ли да събираш само IP-тата и да проверяваш само за днешна дата дали има запис.. т.е ако имаш средно 10000 уникални посещения на ден в DB-то ще се записва долу горе толкова записа...
 
Re: Помощ за структура на БД

@nikoladd благодаря за съветите - взел съм всичко в предвид.

@Shmitkata наистина при фитриране по IP ще се получат доста неприятни неща, но не можах да измисля друг начин - бисквитка е прекалено лесна за изтриване и всички хлапета вече го знаят това, а дори и да направя регистрация, никой не може да спре масовото регистриране ... ако се сещаш за друг способ ...

За сега си мисля, че ще ми трябват всички записи, но съм мислил и за варианта първият запис за деня да трие всичко преди него - това ще го направя ако параметрите на хоста не издържат проверките на целия годишен архив ...
 
Re: Помощ за структура на БД

Специално в php има функции:

ip2long и long2ip

които ти помагат с генерирането на целочисленна стойност от IP адрес.
 
Re: Помощ за структура на БД

ip2long() за някой IP ми дава отрицателни стойности например за 255.255.255.255 - видях в друг код, че ползват $u_ip =sprintf('%u', ip2long($ip)); - така сега работи но дали не биха възникнали други проблеми с това ...?
 
Re: Помощ за структура на БД

е то затова ти писах да ползваш unsigned. това че е отрицателно не е проблем. теб по принцип конкретната стойност не те интересува просто ти трябва да е изброим тип(integer) за сравненията и индексите.

иначе това $u_ip =sprintf('%u', ip2long($ip)); е ако искаш да го показваш, но не виждам смисъл. за показване си ползвай long2ip() ако ти трябва да ги гледаш.
 
Последно редактирано:

Горе