Рекомендованные сообщения

Зачем тебе хранить изображения в базе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Мудрецы помогите пожайлуста.Есть mysql все нормально работает с текстом,цифрами,заполняется и выводится по запросу.Так вот как запихнуть картинки(изображения) в mysql(только его рассматриваем).

Если можно по подробнее, еще раз пожайлуста cool.gif

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

так что работай с файлами и будет тебе счастье))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это как раз к тому кайтовскому изречению, что нельзя использовать СУБД как черный ящик. Надо сравнить скорость чтения файла с диска и из blob, а также затраты ресурсов сервера на эти операции. В MySQL работа с blob довольно медленная и ресурсоемкая операция, поэтому рекомендуется все большие двоичные объекты хранить в файловой системе. В случае же с Oracle, скорость чтения из базы превышает скорость файловой системы, поэтому картинки можно хранить и в blob. Только там сразу начинаются трудности с докачкой, но это решаемо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Такс , спрашиваю по второму разу .

Как сделать доступ в mysql для создания таблиц innoDB? :/

Везде написано , что по умолчанию оно включено , а если хотите отключить , пропишите в конфиге skip-innodb .

У меня этого скипа нет , значит включено .

Но при попытке создания такой таблицы выводится ошибка , где написано что надо сконструировать mysql с innodb ..

 

 

Фсе , покопался - разобрался +)

-----------------------------------------

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня так и остался вопрос, например требуется показать последние 30 записей, а время выполнения запроса "Запрос занял 6.6602 сек"

потому что select count(*) from test возвращает 1 000 000

SELECT * FROM `test2` LIMIT 999990 , 30

 

Кто-нибудь знает что желать в таких случаях запущенных? Сервер конечно не молодой, но довольно-таки быстрый

Изменено пользователем RPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В твоем запросе нет вообще вывода в каком либо порядке.

 

Можно сортировать по полю с автоинкременом в обратном порядке и делать LIMIT 30

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Agrh, думаешь для разбивки на страницы это сойдет?

 

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

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

Изменено пользователем RPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Используй кеширование

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Agrh, точно, пока единственный варинт;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можете подсказать где в корбиновской локалке ( калуга) можно найти ms sql 2000 или 2005 ( нужен для работы с 1с ) ? заранее очень благодарен

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос по конвертированию базы MySQL:

 

Есть форум на движке PHPBB2. Крутится под Apache 2.2 + MySQL 5. Исторически сложилось так, что внутри мускула сопоставление UTF8_general_ci, а клиенту приходит cp1251. Хочется перевести базу в UTF8, для поддержки иероглифов и т.п. Несмотря на кучу различных вариантов конвертирования, расписанных на phpbbguru и подобных сайтах, ни один из них не подошел, при любом из них база портится, пробовалась выгрузка mysqldump, phpmyadmin, sypex dumper lite и последующая конвертация штирлицем, AkelPad. Размер базы около 80 метров, без поисковых таблиц порядка 30 метров. Может кто сталкивался с подобной задачей и имеет готовое решение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как примитив слить всю базу в один sql файл, открыть в любом текстовом редакторе и перекодировать в utf8, затем залить в utf8 базу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мы их все-таки сделали. Я знал, я верил что наши побьют мелкомягких. Подробнее. TPC - организация в которую входят все компании, которые хоть каким-то боком касаются баз данных. Эта организация разрабатывает тесты, позволяющие с очень высокой точностью оценить производительность СУБД. Производительность измеряется в транзакциях в минуту. Но, собственно, в наше время важна не сама производительность, а стоимость этой самой производительности, то есть стоимость одной транзакции. Вот такой тест как TPC-C by Price/Performance такую величину и показывает.

 

Сегодня опубликованы последние TPС тесты http://www.tpc.org/tpcc/results/tpcc_price_perf_results.asp. Oracle прервал господство MSSQL и теперь официально считается самой выгодной СУБД. Ушел бухать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, на 10% выгоднее. А как насчет безопастности?..

Изменено пользователем zed

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Безопасность? Начнем с того, что любой сервис можно положить грамотной DDOS атакой. От этого не застрахован никто. И если вы выставили базу во внешний мир и поставили на DBA пароль 1234, то она проживет недолго. Подавляющее большинство успешных атак происходит только из-за разгильдяйства администраторов.

 

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

 

P.S. Вы не поверите, но Oracle мне за рекламу не платит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Просьба помочь - в MySQL несильно разбираюсь, переделываю движок форума следующим образом: оффтоп не удаляется, а усекается в сокращенную форму постов (без аватары и т.п, занимает немного экраного места). С этим разобрался - дополнительный ряд в таблице сделал (оффтоп=0/1), всякую фигню, чтобы это реализовывалось сделал, для последнего штриха не хватает только следующего:

Посты, вообще, на странице показываются в количестве 10, скажем, штук на страницу, оффтопик ест-но тоже считается, какой танец с бубном необходимо выполнить дабы запрос вида

//$order, $limit = нечто вроде "ORDER BY ..." и "LIMIT 10"
$sql = "SELECT p_uid FROM таблица p WHERE p_tid=$topic AND p__premoderate=0 ORDER BY p_id $order $limit";
 $res =&db_query($sql,$link);

превратился в структуру, которая выдирает нормальные посты с лимитом (WHERE p_offtopic=0 LIMIT 10) и затем оффтопик сколько душе угодно туда же, но хронологический порядок следования постов сохранялся.

 

Или это извращение возможно по-другому реализовать? Спасибо.

Сорри, кажется темой на ночь глядя ошибся.

Изменено пользователем Razmes

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посоветуйте пожалуйста документацию (кроме родной) по написанию триггеров, функций и процедур - идеально на русском.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Просьба помочь - в MySQL несильно разбираюсь, переделываю движок форума следующим образом: оффтоп не удаляется, а усекается в сокращенную форму постов (без аватары и т.п, занимает немного экраного места). С этим разобрался - дополнительный ряд в таблице сделал (оффтоп=0/1), всякую фигню, чтобы это реализовывалось сделал, для последнего штриха не хватает только следующего:

Посты, вообще, на странице показываются в количестве 10, скажем, штук на страницу, оффтопик ест-но тоже считается

В Oracle это можно сделать так:
select * from ТАБЛИЦА
where ДАТА_ИЛИ_НОМЕР_ПОСТА between 
 (select max(ДАТА_ИЛИ_НОМЕР_ПОСТА) from (select row_number() over (order by ДАТА_ИЛИ_НОМЕР_ПОСТА) as R,
	 ДАТА_ИЛИ_НОМЕР_ПОСТА from ТАБЛИЦА where OFFTOP=НЕТ) where R<$С_НОМЕРА)
and
 (select min(ДАТА_ИЛИ_НОМЕР_ПОСТА) from (select row_number() over (order by ДАТА_ИЛИ_НОМЕР_ПОСТА) as R,
	 ДАТА_ИЛИ_НОМЕР_ПОСТА from ТАБЛИЦА where OFFTOP=НЕТ) where R>$ПО_НОМЕР)
order by ДАТА_ИЛИ_НОМЕР_ПОСТА

Я так думаю что в синтаксисе MySQL должно быть что-то подобное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Назрел вопрос: если использовать двойной запрос типа INSERT ... VALUES(SELECT ...) то это будет быстрее, чем работать в 2 запроса (с условием, что запросы к БД отправляет скрипт и время его работы между 2 запросами близко к нулю)?

 

Usama Bin Laden, насчет безопастности согласен, если делать 100% безопасную БД (теоретически), то ее производительность заметно уменьшится...

Изменено пользователем zed

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Назрел вопрос: если использовать двойной запрос типа INSERT ... VALUES(SELECT ...) то это будет быстрее, чем работать в 2 запроса (с условием, что запросы к БД отправляет скрипт и время его работы между 2 запросами близко к нулю)?
В любом случае один запрос быстрее чем несколько. Требуется меньше времени на подготовку запроса и на фетч. Но есть одно но. Если СУБД блокировочная, как например MySQL с движком innodb или MSSQL2000, то всё будет нормально. Если же СУБД версионная, как MySQL с innodb или PostgreSQL, то тут при больших объемах данных произойдет разрастание той части базы, где хранится информация для отката транзакции. Для предотвращения этого надо через каждые N вставленных записей делать commit.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не, я тока innodb пользуюсь :) Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не подскажете, как сделать запрос SELECT сразу на 2 таблицы, так, чтобы колонка из одной дополнила колонку из другой? Допустим в обоих есть строка 'lalala', и запрос вернул бы 2 строки; а если только в одной есть искомая строка, то и запрос вернул бы 1 строку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не подскажете, как сделать запрос SELECT сразу на 2 таблицы, так, чтобы колонка из одной дополнила колонку из другой? Допустим в обоих есть строка 'lalala', и запрос вернул бы 2 строки; а если только в одной есть искомая строка, то и запрос вернул бы 1 строку.

а у тебя в двух разных таблицах лежат однотипные данные? :(

а вообще, в таком случае пишешь что-то наподобие:

select some_str1 as str from base.table1 where some_str01 like '%lalala%'
union
select some_str2 as str from base.table2 where some_str02 like '%lalala%'

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Просто такая необходимость. Так, попробовал сделать вышеописанное с count(), но получаю в ответ 2 строки с результатами, хотелось бы в одной...

 

Пока интерпретировал, получился рабочий запрос:

select (select count(*) from tab1 where par=str) + (select count(*) from tab2 where par=str);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Народ , такой вопрос.

В общем в бд заносится определенное кол-во (от 1 до 200) строк при работе скрипта .

Один из столбцов - дата .

Мне нужно вытащить все строки с максимальной датой , но которая меньше текущей .

По другому - вытащить все строки , которые были занесены в бд при прошлой работе скрипта .

mysql> select * from parsing where date < 'текущей даты' having date = max(date);

Но это выводит только одну строку :/

Изменено пользователем GaLLe0n

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

GaLLe0n, может и не выглядит красиво, зато работает:

SELECT * FROM parsing WHERE date = (SELECT date FROM parsing WHERE date < 'curr_date' HAVING date = max(date));

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да с этим уже разобрался , но все равно спасибо :-)

Теперь такой вопрос .

Вот в табле есть 4 столбца .

Запрос через UNION сначала ищет какое то значение в первом столбце , потов во втором , и тд

То есть толком в запросе 4 подзапроса , соединенных юнионом .

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

А 4 запроса отдельно делать и проверять ,есть ли значение или нет , не хочецц0 :-) Можно ли что нибудь сделать ?

 

 

Ну как обычно , сам разобрался :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Коды в студию, чтобы другие не ломали головы)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

$q = "(SELECT 'yandex' as search, yandexpos FROM positions where yandexpos != '' and lookingfor = '$lookingfor' and query = '$word' ORDER BY date DESC limit 1)

UNION

(SELECT 'google' as search, googlepos FROM positions where googlepos != '' and lookingfor = '$lookingfor' and query = '$word' ORDER BY date DESC limit 1)

UNION

(SELECT 'rambler' as search, ramblerpos FROM positions where ramblerpos != '' and lookingfor = '$lookingfor' and query = '$word' ORDER BY date DESC limit 1)

UNION

(SELECT 'webalta' as search, webaltapos FROM positions where webaltapos != '' and lookingfor = '$lookingfor' and query = '$word' ORDER BY date DESC limit)";

:lol:

То есть будет ещё столбец search , где будет написано что от чего )

Изменено пользователем GaLLe0n

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас