Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нагрузка на базу или на скрипт?
 
 автор: valenok   (23.11.2006 в 12:42)   письмо автору
 
 

Всем привет.
Есть таблица в которой будут предположительно около 50 000 строк.
И скрипт кеоторый по ходу будет запускаться паралельно на разных компьютер тоже около 1000 раз (паралельно).

Мне надо в базе держать букву и её количество.
Тоесть A5, Z28, P14 и так далее

Не могу понять, что с точки зрения эффективности лучше, 10 колонок в таблице где по отдельности буква, а во второй колонке её количество или 5 колонок в которых будет записанно одновременно и буква и количество, а парсинг делать скриптом.

Тоесть:
Вариант 1, 10 ячеек:

|A|1|B|14|C|36|D|18| ...

Или чтото такое:
A1| B14| C36| D18| ...

Что с точки зрения время исполнения и ситемных ресурсов лучше?
Заранее благодарю. Надеюсь понятно объяснил =)

   
 
 автор: Trianon   (23.11.2006 в 12:46)   письмо автору
 
   для: valenok   (23.11.2006 в 12:42)
 

Зависит от того, что делает этот самый скрипт.
Может поподробнее задачку опишите?

   
 
 автор: valenok   (23.11.2006 в 19:26)   письмо автору
 
   для: Trianon   (23.11.2006 в 12:46)
 

Вкралась опечатка, в базе 500 000 строк..

Скрипт сам по себе очень большой и требует больших системных ресурсов.
Вопрос был в том, что эффективней,

ставить в базе 10 колонок
в скрипте цикл прогонять 10 раз

или в базе 5 колонок
цикл прогонять 5 раз, но в цикле добавить нечто вроде
$var1 = $var{0}; $var2 = $var{1};

Размер базы в обоих случаях тот же, вопрос в кол-ве. колонок,
или запуске циклов.

--

Сам скрипт это чтото вроде того что у пользователя есть 5 букв, каждой буквы есть определённое количество, ему надо составить слова из этих букв. Если он использует букву, количество этой буквы спускается, а когда он использует все буквы "А" то а таблице колонка отведённая под букву А опусташается.

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

Объём информации в базе остаётся тем же не взирая на количество стобцов.

   
 
 автор: Trianon   (23.11.2006 в 19:55)   письмо автору
 
   для: valenok   (23.11.2006 в 19:26)
 

Если никакого поиска по этим буквам не предвидится, то эффективнее всего сделать одно поле фиксированной (достаточной) длины, и в нем хранить всё. И набор букв, и их "остатки".
Если остатки, конечно, скромных размеров. В противном случае - 6 полей.
Набор букв char(5) и пять счетчиков типа TINYINT (SMALLINT, INT если не лезет)
В любом случае полей VARCHAR, TEXT, BLOB нужно избежать.

   
 
 автор: valenok   (23.11.2006 в 20:28)   письмо автору
 
   для: Trianon   (23.11.2006 в 19:55)
 

Букв всего 5.
Макс. количество одной буквы это 999 999

Всмысле при максимальных значениях в базе будут находиться следующие значения:

999999А
999999Б
999999В
999999Г
999999Д

Ты предлагаешь вписать всё в одно поле а скриптом делать парсинг?
И при этом избегать поля Varchar, text, blob ?

Не представляю как.
Тогда придётся использовать 5 полей, мало того Varchar ...

А ещё тогда просто метод парсинга $var1 = $var{0}; $var2 = $var{1};
не подойдёт..

   
 
 автор: Trianon   (23.11.2006 в 20:34)   письмо автору
 
   для: valenok   (23.11.2006 в 20:28)
 

нет. Если макс. число миллион, то так.

id INT(11),
letters CHAR(5),                 -- АБВГД 
cnt1 MEDIUMINT(6),                          -- 999999
cnt2 MEDIUMINT(6),                          -- 999999
cnt3 MEDIUMINT(6),                          -- 999999
cnt4 MEDIUMINT(6),                          -- 999999
cnt5 MEDIUMINT(6),                          -- 999999

в 24...32 байта запись можно втиснуть. Не считая индекса.

   
 
 автор: valenok   (23.11.2006 в 20:38)   письмо автору
 
   для: Trianon   (23.11.2006 в 20:34)
 

А обрабатывать тогда наиболее эффективным методом как?
И при этом не забывать что Apache + PHP тянут больше сис. ресурсов чем MySQL ?

   
 
 автор: Trianon   (23.11.2006 в 20:52)   письмо автору
 
   для: valenok   (23.11.2006 в 20:38)
 

Вы же не сказали, какие операции выполняете с этой таблицей. Даже структуру её полностью не привели. Сказали отвечать сугубо по вопросу. По вопросу и ответил.

   
 
 автор: valenok   (23.11.2006 в 22:09)   письмо автору
 
   для: Trianon   (23.11.2006 в 20:52)
 

Cтруктуру таблицы вы сами привели :


id INT(11), 
letters CHAR(5),                 -- АБВГД  
cnt1 MEDIUMINT(6),                          -- 999999 
cnt2 MEDIUMINT(6),                          -- 999999 
cnt3 MEDIUMINT(6),                          -- 999999 
cnt4 MEDIUMINT(6),                          -- 999999 
cnt5 MEDIUMINT(6),                          -- 999999

   
 
 автор: valenok   (24.11.2006 в 11:07)   письмо автору
 
   для: valenok   (23.11.2006 в 22:09)
 

Ну и операции само собой SELECT INSERT UPDATE всё..

   
 
 автор: Trianon   (24.11.2006 в 13:09)   письмо автору
 
   для: valenok   (24.11.2006 в 11:07)
 

с where id=... (если id - primary key) и SELECT и UPDATE будут выполняться мгновенно.
INSERT тоже.

   
 
 автор: valenok   (24.11.2006 в 16:12)   письмо автору
 
   для: Trianon   (24.11.2006 в 13:09)
 

А теперь попробую изложить проблему по другому для того чтобы получить однозначный ответ

Скрипт работает паралельно на 1000 компьютерах.
В базе 500 000 строк.
Как по вашему должна выглядеть база и кусок скрипта который будет брать из базы
набор букв и их количество.

В каждой строке в базе дожны находиться пять определённых букв, в нашем случае это А, Б, В, Г и Д
Теперь каждому ползователю скрипта принадлежит одна строка в базе, к примеру с индетификатором ID = 217259, которsq хранится в сессии.

Пользователь использует букву А, и в базе списывается количество букв А для этого пользователя на одну единицу.

Как по вашему должна выглядеть база и кусок скрипта который будет брать из базы
набор букв и их количество.
Требования: наименьшие системные требования, наивысшая скорость исполнения. Вообщем - эффективность.

Заранее благодарю.

   
 
 автор: Loki   (24.11.2006 в 16:38)   письмо автору
 
   для: valenok   (24.11.2006 в 16:12)
 

Я может не очень понял условие, но я бы вообще оставил три колонки:
буква | частота | идентификатор юзера.
номер сессии вынес бы в отдельную таблицу. Ну и все проиндексировал, понятное дело.

   
 
 автор: valenok   (24.11.2006 в 16:55)   письмо автору
 
   для: Loki   (24.11.2006 в 16:38)
 

Есть такая игра. У тебя всего 15 фишек, на каждой фишке 1 буква.
Всего в игре 5 разных букв и они А, Б, В, Г и Д
Тоесть в самом начале игры у тебя 5 фишек с буквой А, 5 Б, 5 В ...

Ты составил слово, тебе в другой таблице начислилось 10 очков. При составе слорва ты использовал буквы три буквы Г, А и В
Их количество в базе тебе следует списать, тоесть у тебя осталось 4 фишки Г, 4 фишки А и 4 фишки В

Как следует записывать в таблице количество оставшихся у тебя букв ?
Как в скрипте получить а отдельные переменные количество букв и саму букву?
Тоесть:

$letter_1 = 'A';
$quantity_1 = '4';

$letter_2 = 'B';
$quantity_2 = '4';

$letter_3 = 'Д';
$quantity_3 = '4';

   
 
 автор: valenok   (24.11.2006 в 17:03)   письмо автору
 
   для: valenok   (24.11.2006 в 16:55)
 

Планируется около 1000 обновлений базы в минуту UPDATE
И 1000 выборок в мин. SELECT

её максимальный размер будет

6-ти значный идентификатор строки / пользователя
5 букв
5 шестизначных цифр означающих количество той или иной буквы

Тоесть при макс. значениях, в базе будут записанны

6+5+6*5 = 41 байт на строку
500 000 строк = 20500 кб = 20 мб
Так?


И всё же вопрос: как следует делать таблицу? Как она должны выглядеть для того чтобы можно было достичь эффективнейшего исполнения скрипта.

   
 
 автор: Trianon   (24.11.2006 в 18:02)   письмо автору
 
   для: valenok   (24.11.2006 в 16:12)
 

Что то я не понял, на разных строках (т.е. у разных пользователей) разные наборы букв? Или у всех А Б В Г Д ?

   
 
 автор: valenok   (24.11.2006 в 18:03)   письмо автору
 
   для: Trianon   (24.11.2006 в 18:02)
 

У каждого разные

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования