Результаты поиска
Вызов ошибки в триггере MySQL
Если у меня есть trigger before the update на таблице, как я могу бросить ошибку, которая предотвращает обновление на этой таблице?
Как экспортировать данные из SQL Server 2005 в MySQL
Я бился головой о SQL Server 2005 , пытаясь получить много данных. Мне дали базу данных с почти 300 таблицами в ней, и мне нужно превратить ее в базу данных MySQL. Мой первый вызов состоял в том, чтобы использовать bcp, но, к сожалению, он не производит допустимые CSV - строки не инкапсулируются, поэтому вы не можете иметь дело ни с одной строкой, в которой есть строка с запятой (или что бы вы ни использовали в качестве разделителя), и мне все равно придется вручную написать все инструкции create table, поскольку очевидно, что CSV ничего не говорит вам о типах данных.
Что было бы лучше, если бы существовал какой-то инструмент, который мог бы подключиться как к серверу SQL, так и к серверу MySQL, а затем сделать копию. Вы теряете представления, хранимые процедуры, триггер и т. д., но нетрудно скопировать таблицу, которая использует только базовые типы, из одного DB в другой... так ли это?
Кто-нибудь знает о таком инструменте? Я не возражаю против того, сколько предположений он делает или какие упрощения происходят, пока он поддерживает integer, float, datetime и string. Мне приходится много заниматься обрезкой, нормализацией и т. д. в любом случае, я не забочусь о сохранении ключей, отношений или чего-то подобного, но мне нужен начальный набор данных быстро!
SQL Server 2005 реализация функции MySQL REPLACE INTO?
MySQL имеет эту невероятно полезную, но правильную команду REPLACE INTO SQL.
Можно ли это легко эмулировать в SQL Server 2005?
Запуск новой транзакции, выполнение Select() , а затем либо UPDATE , либо INSERT и COMMIT -это всегда немного больно, особенно когда вы делаете это в приложении и поэтому всегда сохраняете 2 версии инструкции.
Интересно, есть ли простой и универсальный способ реализовать такую функцию в SQL Server 2005?
Python и MySQL
Я могу заставить Python работать с Postgresql, но я не могу заставить его работать с MySQL. Основная проблема заключается в том, что на общей учетной записи хостинга у меня нет возможности устанавливать такие вещи, как Django или PySQL, я обычно не могу установить их на свой компьютер, поэтому, возможно, это хорошо, что я не могу установить на хосте.
Я нашел bpgsql действительно хорошим, потому что он не требует установки, это один файл, который я могу посмотреть, прочитать, а затем вызвать функции. Кто-нибудь знает что-то подобное для MySQL?
Насколько большой может быть база данных MySQL, прежде чем производительность начнет снижаться
В какой момент база данных MySQL начинает терять производительность?
- Имеет ли значение физический размер базы данных?
- Имеет ли значение количество записей?
- Является ли любое снижение производительности линейным или экспоненциальным?
У меня есть то, что я считаю большой базой данных, с примерно 15М записями, которые занимают почти 2 ГБ. Основываясь на этих цифрах, есть ли у меня стимул Очистить данные, или я могу позволить им продолжать масштабироваться еще несколько лет?
Механизмы отслеживания изменений схемы DB
Каковы наилучшие методы отслеживания и / или автоматизации изменений схемы DB? Наша команда использует Subversion для управления версиями, и мы смогли автоматизировать некоторые из наших задач таким образом (перемещение сборок на промежуточный сервер, развертывание тестируемого кода на рабочий сервер), но мы все еще делаем обновления базы данных вручную. Я хотел бы найти или создать решение, которое позволит нам эффективно работать на разных серверах с различными средами, продолжая использовать Subversion в качестве бэкенда, через который код и обновления DB передаются на различные серверы.
Многие популярные программные пакеты включают в себя сценарии автоматического обновления, которые обнаруживают версию DB и применяют необходимые изменения. Является ли это лучшим способом сделать это даже в более крупном масштабе (через несколько проектов, а иногда и через несколько сред и языков)? Если да, то есть ли какой-либо существующий код, который упрощает этот процесс, или лучше всего просто запустить наше собственное решение? Кто-нибудь реализовывал что-то подобное раньше и интегрировал его в Subversion post-commit hooks, или это плохая идея?
Хотя решение, поддерживающее несколько платформ, было бы предпочтительнее, мы определенно должны поддерживать стек Linux/Apache/MySQL/PHP, поскольку большая часть нашей работы находится на этой платформе.
Автогенерация Диаграммы Базы Данных MySQL
Я устал открывать Dia и создавать схему базы данных в начале каждого проекта. Есть ли там инструмент, который позволит мне выбрать определенные таблицы, а затем создать схему базы данных для меня на основе базы данных MySQL? Предпочтительно, чтобы это позволило мне отредактировать диаграмму позже, так как ни один из внешних ключей не установлен...
Вот что я представляю себе схематично (пожалуйста, извините за ужасный дизайн данных, я его не проектировал. Давайте сосредоточимся на концепции диаграммы, а не на фактических данных, которые она представляет для этого примера ;) ):
Автогенерация Диаграммы Базы Данных MySQL
Я устал открывать Dia и создавать схему базы данных в начале каждого проекта. Есть ли там инструмент, который позволит мне выбрать определенные таблицы, а затем создать схему базы данных для меня на основе базы данных MySQL? Предпочтительно, чтобы это позволило мне отредактировать диаграмму позже, так как ни один из внешних ключей не установлен...
Вот что я представляю себе схематично (пожалуйста, извините за ужасный дизайн данных, я его не проектировал. Давайте сосредоточимся на концепции диаграммы, а не на фактических данных, которые она представляет для этого примера ;) ):
Что мне нужно избежать при отправке запроса?
При выполнении запроса SQL необходимо очистить строки, иначе пользователи могут выполнить вредоносный запрос SQL на вашем веб-сайте.
У меня обычно просто есть функция escape_string(бла), которая:
- Заменяет escapes (
\) на двойные escapes (\\). - Заменяет одинарные кавычки (
') на экранированные одинарные кавычки (\').
Достаточно ли этого? Есть ли дыра в моем коде? Есть ли библиотека, которая может сделать это быстро и надежно для меня?
Я хотел бы видеть изящные решения в Perl, Java и PHP.
Как получить имя пользователя и пароль MySQL?
Я потерял свой MySQL логин и пароль. Как мне его вернуть?
Больше, чем символ, но меньше, чем капля
Char отлично подходят, потому что они имеют фиксированный размер и, таким образом, делают более быструю таблицу. Однако они ограничены 255 символами. Я хочу держать 500 символов, но blob-это переменная длина, и это не то, что я хочу.
Есть ли способ иметь поле фиксированной длины 500 символов в MySQL или мне придется использовать 2 поля char?
Больше, чем символ, но меньше, чем капля
Char отлично подходят, потому что они имеют фиксированный размер и, таким образом, делают более быструю таблицу. Однако они ограничены 255 символами. Я хочу держать 500 символов, но blob-это переменная длина, и это не то, что я хочу.
Есть ли способ иметь поле фиксированной длины 500 символов в MySQL или мне придется использовать 2 поля char?
Есть ли какой-либо нетекстовый интерфейс для MySQL?
У меня есть запрос MySQL, который возвращает результат с одним столбцом целых чисел. Есть ли способ получить MySQL C API, чтобы передать это как фактически целые числа, а не как текст ASCII? Если на то пошло, есть ли способ заставить MySQL делать /any/ из API вещей, кроме ASCII текста. Я думаю, что это сэкономит немного времени в sprintf/sscanf или что-то еще используется, а также в пропускной способности.
Как заставить PHP и MySQL работать на IIS 7.0?
Хорошо, я искал по всему интернету хорошее решение, чтобы заставить PHP и MySQL работать над IIS7.0. Это почти невозможно, я столько раз пробовал это сделать, но все было напрасно. Пожалуйста, помогите, связав некоторые большие учебники step-by-step с добавлением PHP и MySQL на IIS7.0 с нуля. PHP и MySQL необходимы для установки любого CMS.
Укажите номер порта в Emacs sql-mysql
Я использовал интерактивный режим Emacs sql для разговора с сервером MySQL db и получил удовольствие от этого. Разработчик установил другую БД на новый номер порта, не являющийся стандартным, но я не знаю, как получить к нему доступ с помощью sql-mysql.
Как указать номер порта при попытке подключения к базе данных?
Было бы еще лучше, если Emacs может запросить у меня номер порта и просто использовать значение по умолчанию, если я не указываю. Есть ли на это шансы?
PHP + MYSQLI: привязка переменных параметров / результатов к подготовленным операторам
В проекте, который я собираюсь завершить, я написал и реализовал решение объектно-реляционного сопоставления для PHP. Прежде чем сомневающиеся и мечтатели воскликнут: "как же так?", расслабьтесь - Я не нашел способа сделать работу поздней статической привязки - я просто работаю над этим наилучшим образом,который я могу сделать.
В любом случае, в настоящее время я не использую подготовленные операторы для запросов, потому что я не мог придумать способ передать переменное количество аргументов в методы bind_params() или bind_result() .
Почему мне нужно поддерживать переменное количество аргументов, спросите вы? Потому что суперкласс моих моделей (подумайте о моем решении как о взломанном PHP ActiveRecord wannabe) - это то, где определяется запрос, и поэтому метод find(), например, не знает, сколько параметров ему нужно будет связать.
Теперь я уже думал о создании списка аргументов и передаче строки в eval(), но мне не очень нравится это решение-я бы предпочел просто реализовать свои собственные проверки безопасности и передать операторы.
Есть ли у кого-нибудь предложения (или истории успеха) о том, как это сделать? Если вы можете помочь мне решить эту первую проблему, возможно, мы сможем решить привязку результирующего набора (что-то, что я подозреваю, будет сложнее или, по крайней мере, более ресурсоемким, если он включает в себя первоначальный запрос для определения структуры таблицы).
Каков хороший способ денормализации базы данных mysql?
У меня есть большая база данных нормализованных данных заказа, которые становятся очень медленными для запроса отчетов. Многие из запросов, которые я использую в отчетах, объединяют пять или шесть таблиц и должны исследовать десятки или сотни тысяч строк.
Есть много запросов, и большинство из них были максимально оптимизированы, чтобы уменьшить нагрузку на сервер и увеличить скорость. Я думаю, что пришло время начать хранить копию данных в денормализованном формате.
Есть идеи по поводу подхода? Должен ли я начать с пары моих худших запросов и пойти оттуда?
mysqli или PDO - каковы плюсы и минусы?
В нашем случае мы разделены между использованием mysqli и PDO для таких вещей, как подготовленные заявления и поддержка транзакций. Некоторые проекты используют одно, некоторые другое. Существует очень мало реальной вероятности того, что мы когда-нибудь переедем в другой RDBMS.
Я предпочитаю PDO только по той причине, что он допускает именованные параметры для подготовленных операторов, а насколько мне известно, mysqli этого не делает.
Есть ли еще какие-то плюсы и минусы в выборе одного из них в качестве стандарта, когда мы объединяем наши проекты, чтобы использовать только один подход?
Как отобразить статистику запросов к базе данных на сайте Wordpress?
Я заметил, что некоторые блоги Wordpress имеют статистику запросов, представленную в их нижнем колонтитуле, которая просто указывает количество запросов и общее время, необходимое для их обработки для конкретной страницы, читая что-то вроде:
23 вопроса. 0.448 секунд
Мне было интересно, как это делается. Может быть, это связано с использованием конкретного плагина Wordpress или, возможно, с использованием какой-то конкретной функции php в коде страницы?
SQL С Предохранительной Сеткой
В моей фирме есть талантливый и умный оперативный персонал, который очень много работает. Я хотел бы дать им инструмент SQL-execution, который поможет им избежать распространенных, легко обнаруживаемых ошибок SQL, которые легко сделать, когда они спешат. Может ли кто-нибудь предложить такой инструмент? Далее следуют подробности.
Часть компетенции оперативной группы заключается в написании очень сложных специальных запросов SQL. Неудивительно, что операторы иногда делают ошибки в запросах, которые они пишут, потому что они очень заняты.
К счастью, их запросы все SELECTs не изменяют данные SQL, и они все равно работают на копии базы данных. Тем не менее, мы хотели бы предотвратить ошибки в SQL, которые они запускают. Например, иногда ошибки приводят к длительным запросам, которые замедляют работу дублирующей системы, которую они используют, и причиняют неудобства другим, пока мы не найдем преступный запрос и не убьем его. Хуже того, иногда ошибки приводят к явно правильным ответам, которые мы не улавливаем до тех пор, пока много позже, с последующим смущением.
Наши разработчики также делают ошибки в сложном коде, который они пишут, но у них есть Eclipse и различные плагины (такие как FindBugs), которые ловят ошибки при вводе. Я бы хотел дать операторам нечто подобное - в идеале это было бы видно
SELECT U.NAME, C.NAME FROM USER U, COMPANY C WHERE U.NAME = 'ibell';
и перед тем, как вы его исполните, он скажет: "Эй, вы поняли, что это декартово произведение? Вы уверены, что хотите это сделать?"Это не должно быть очень умно - найти явно отсутствующие условия соединения и подобные очевидные ошибки было бы прекрасно.
Похоже, что TOAD должен сделать это, но я не могу найти ничего о такой функции. Существуют ли другие инструменты, такие как TOAD, которые могут обеспечить такое полуинтеллектуальное исправление ошибок?
Обновление: я забыл упомянуть, что мы используем MySQL.
Java+Tomcat, умирающее соединение с базой данных?
У меня есть установка экземпляра tomcat, но соединение с базой данных, которое я настроил в context.xml , продолжает умирать после периодов бездействия.
Когда я проверяю журналы я получаю следующую ошибку:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Последний пакет успешно полученный с сервера составил 68051 сек тому назад. Последний пакет успешно отправлено на сервер был 68051 секунд назад, что больше, чем настроенное значение сервера 'wait_timeout'. Вы должны рассмотреть возможность истечения срока действия и / или тестирования срок действия соединения перед использованием в вашем приложении, увеличивая сервер настроил значения для таймаутов клиента или с помощью соединителя / J свойство соединения 'autoReconnect=true', чтобы избежать этой проблемы.
Вот конфигурация в context.xml:
<Resource name="dataSourceName"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="username"
password="********"
removeAbandoned = "true"
logAbandoned = "true"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/databasename?autoReconnect=true&useEncoding=true&characterEncoding=UTF-8" />
Я использую autoReconnect=true , как говорит ошибка, но соединение продолжает умирать. Я никогда раньше не видел, как это происходит.
Я также проверил, что все подключения к базе данных закрываются должным образом.
Как выбрать N-ю строку в таблице базы данных SQL?
Мне интересно изучить некоторые (в идеале) агностические способы выбора n-й строки из таблицы базы данных. Было бы также интересно посмотреть, как это может быть достигнуто с помощью собственных функциональных возможностей следующих баз данных:
- SQL сервер
- MySQL
- PostgreSQL
- SQLite
- Oracle
В настоящее время я делаю что-то вроде следующего в SQL Server 2005, но мне было бы интересно увидеть другие более агностические подходы:
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000
Кредит за вышеизложенное SQL: веб- блог Фироза Ансари
Update: смотрите ответ Troels Arvin относительно стандарта SQL. Троэльс, у тебя есть какие-нибудь ссылки, которые мы можем привести?
Переход с MySQL на PostgreSQL
В настоящее время мы используем MySQL для продукта, который мы создаем, и стремимся перейти на PostgreSQL как можно скорее, в первую очередь по причинам лицензирования.
Кто-нибудь еще сделал такой шаг? Наша база данных-это жизненная сила приложения и в конечном итоге будет хранить TBs данных, поэтому я очень хочу услышать об опыте работы improvements/losses, основных препятствий в преобразовании SQL и хранимых процедурах и т. д.
Edit: просто чтобы разъяснить тем, кто спрашивал, почему нам не нравится лицензирование MySQL. Мы разрабатываем коммерческий продукт, который (в настоящее время) зависит от MySQL в качестве бэк-энда базы данных. В их лицензии говорится, что мы должны платить им процент от нашей прейскурантной цены за установку, а не фиксированную плату. Как стартап, это менее чем привлекательно.
Выбрать..... где.... ОПЕРАЦИОННАЯ
Есть ли способ выбрать данные, в которых любое из нескольких условий происходит в одном и том же поле?
Пример: я обычно пишу заявление, например::
select * from TABLE where field = 1 or field = 2 or field = 3
Есть ли способ вместо этого сказать что-то вроде:
select * from TABLE where field = 1 || 2 || 3
Любая помощь будет оценена по достоинству.
Работа с PHP сервером и MySQL сервером в разных часовых поясах
Для тех из нас, кто использует стандартные пакеты общего хостинга, такие как GoDaddy или сетевые решения, как вы обрабатываете конверсии datetime, когда ваш хостинг-сервер (PHP) и MySQL сервер находятся в разных часовых поясах?
Кроме того, есть ли у кого-нибудь рекомендации по определению часового пояса, в котором находится посетитель вашего сайта, и соответствующим образом манипулирует переменной datetime?
Быстрый простой способ перенести SQLite3 в MySQL?
Кто-нибудь знает быстрый и простой способ переноса базы данных SQLite3 в MySQL?
PHP скрипт для заполнения таблиц MySQL
Кто-нибудь знает о script/class (предпочтительно в PHP), который будет анализировать данный MySQL table's structure , а затем заполнять его x number of rows случайными тестовыми данными на основе типов полей?
Я никогда не видел и не слышал о чем-то подобном и подумал, что проверю, прежде чем писать самому.
Выбрать..... где.... ОПЕРАЦИОННАЯ
Есть ли способ выбрать данные, в которых любое из нескольких условий происходит в одном и том же поле?
Пример: я обычно пишу заявление, например::
select * from TABLE where field = 1 or field = 2 or field = 3
Есть ли способ вместо этого сказать что-то вроде:
select * from TABLE where field = 1 || 2 || 3
Любая помощь будет оценена по достоинству.
MyISAM против InnoDB
Я работаю над проектами, которые включают в себя много записей базы данных, я бы сказал ( 70% вставляет и 30% читает ). Это соотношение также будет включать обновления, которые я считаю одним чтением и одной записью. Чтение может быть грязным (например, мне не нужна 100% точная информация во время чтения).
Задача, о которой идет речь, будет заключаться в выполнении более 1 миллиона транзакций базы данных в час.
Я прочитал кучу материала в интернете о различиях между MyISAM и InnoDB, и MyISAM кажется мне очевидным выбором для конкретной базы данных/таблиц, которые я буду использовать для этой задачи. Из того, что я, кажется, читаю, InnoDB хорошо, если транзакции необходимы, так как поддерживается блокировка уровня строки.
Есть ли у кого-нибудь опыт работы с этим типом нагрузки (или выше)? Разве MyISAM-это правильный путь?
Существует ли эквивалент профилировщика для MySql?
"Microsoft SQL Server Profiler - это графический пользовательский интерфейс к SQL Trace для мониторинга экземпляра компонента Database Engine или служб Analysis Services."
Я нахожу использование SQL Server Profiler чрезвычайно полезным во время разработки, тестирования и при отладке проблем приложений баз данных. Кто-нибудь знает, есть ли эквивалентная программа для MySql?
Как поддерживать рекурсивный инвариант в базе данных MySQL?
У меня есть дерево, закодированное в базе данных MySQL как ребра:
CREATE TABLE items (
num INT,
tot INT,
PRIMARY KEY (num)
);
CREATE TABLE tree (
orig INT,
term INT
FOREIGN KEY (orig,term) REFERENCES items (num,num)
)
Для каждого листа в дереве, items.tot устанавливается кем-то. Для внутренних узлов items.tot должен быть суммой его дочерних элементов. Повторное выполнение следующего запроса приведет к желаемому результату.
UPDATE items SET tot = (
SELECT SUM(b.tot) FROM
tree JOIN items AS b
ON tree.term = b.num
WHERE tree.orig=items.num)
WHERE EXISTS
(SELECT * FROM tree WHERE orig=items.num)
(обратите внимание, что это на самом деле не работает, но это к делу не относится)
Предположим, что база данных существует и инвариант уже удовлетворен.
Вопрос в том:
Каков наиболее практичный способ обновления DB при сохранении этого требования? Обновления могут перемещать узлы вокруг или изменять значение
totна конечных узлах. Можно предположить, что листовые узлы останутся листовыми узлами, внутренние узлы останутся внутренними узлами, и все это останется как правильное дерево.
Некоторые мысли у меня были:
- Полное аннулирование, после любого обновления, пересчитать все (ум... Нет)
- Установите триггер в таблице элементы для обновления родительского элемента любой обновляемой строки
- Это было бы рекурсивно (обновления запускают обновления, запускают обновления,...)
- Не работает, MySQL не может обновить таблицу, которая запустила триггер
- Установите триггер для планирования обновления родительского элемента любой обновляемой строки
- Это было бы итеративно (получить элемент из расписания, обработка его планирует больше элементов)
- Что же это такое? Доверяйте клиентскому коду, чтобы получить его правильно?
- Преимущество заключается в том, что если обновления упорядочены правильно, то меньше сумм должно быть вычислено. Но этот порядок сам по себе является осложнением.
Идеальное решение было бы обобщить на другие "aggregating invariants"
FWIW я знаю, что это "немного за бортом", но я делаю это для удовольствия (Fun: verb, находя невозможное, делая это. :-)
Если у меня есть строка PHP в формате YYYY-DD-MM и timestamp в MySQL, есть ли хороший способ конвертировать между ними?
Мне интересно провести сравнение между строкой даты и MySQL timestamp. Однако я не вижу легкой конверсии. Неужели я упускаю что-то очевидное?
Автоматизируйте Синхронизацию Oracle Таблиц С MySQL Таблицами
Университет, в котором я работаю, использует Oracle для системы баз данных. В настоящее время у нас есть программы, которые мы запускаем ночью, чтобы загрузить то, что нам нужно, в некоторые локальные таблицы доступа для наших потребностей тестирования. Доступ становится маленьким для этого сейчас, и нам нужно что-то большее. Кроме того, ночные задания требуют постоянного обслуживания, чтобы продолжать работать (из-за проблем с сетью, изменений таблиц, плохого кода:)), и я хотел бы устранить их, чтобы освободить нас для более важных вещей.
Я больше всего знаком с MySQL, поэтому я настраиваю тестовый сервер MySQL. Как лучше всего автоматизировать копирование необходимых таблиц из Oracle в MySQL?
Редактировать: я принял ответ. Мне не нравится ответ, но он кажется правильным на основе дальнейших исследований и отсутствия других ответов. Спасибо всем, кто обдумал мой вопрос и ответил на него.
Какой хороший способ инкапсулировать доступ к данным с помощью PHP/MySQL?
Большая часть моего опыта находится в стеке MSFT, но сейчас я работаю над сайд-проектом, помогая кому-то с личным сайтом с дешевым хостингом, который построен на стеке LAMP. Мои возможности по установке дополнительных компонентов ограничены, поэтому мне интересно, как написать код доступа к данным без внедрения необработанных запросов в файлы .php.
Я люблю, чтобы все было просто, даже с этим .NET. Обычно я пишу хранимые процедуры для всего, и у меня есть вспомогательный класс, который обертывает все вызовы для выполнения процедур и возврата наборов данных. Я не ищу полномасштабного ORM,но это может быть путь, и другие, кто рассматривает этот вопрос, возможно, ищут его.
Помните, что у меня есть учетная запись $7/month GoDaddy, поэтому я ограничен тем, что уже установлено в их базовом пакете.
Edit: спасибо rix0rr, Алан, Андерс, Дракон, Я проверю все это. Я отредактировал вопрос, чтобы быть более открытым для решений ORM, поскольку они так популярны.
Что является лучшим способом, чтобы взаимодействовать с сервером MySQL?
Я собираюсь использовать C/C++, и хотел бы знать, как лучше всего поговорить с сервером MySQL. Должен ли я использовать библиотеку, которая поставляется с установкой сервера? Есть ли у них хорошие библиотеки, которые я должен рассматривать, кроме официальной?
Наиболее эффективный способ получить данные из базы данных в сеанс
Каков самый быстрый способ получить большой объем данных (подумайте о гольфе) и самый эффективный (подумайте о производительности), чтобы получить большой объем данных из базы данных MySQL в сеанс, не продолжая делать то, что у меня уже есть:
$sql = "SELECT * FROM users WHERE username='" . mysql_escape_string($_POST['username']) . "' AND password='" . mysql_escape_string(md5($_POST['password'])) . "'";
$result = mysql_query($sql, $link) or die("There was an error while trying to get your information.\n<!--\n" . mysql_error($link) . "\n-->");
if(mysql_num_rows($result) < 1)
{
$_SESSION['username'] = $_POST['username'];
redirect('index.php?p=signup');
}
$_SESSION['id'] = mysql_result($result, '0', 'id');
$_SESSION['fName'] = mysql_result($result, '0', 'fName');
$_SESSION['lName'] = mysql_result($result, '0', 'lName');
...
И прежде чем кто-нибудь спросит "да", мне действительно нужно "SELECT
Edit: Да, Я дезинфицирую данные, так что не может быть никакой инъекции SQL, которая находится дальше в коде.
Копирование / дублирование базы данных без использования mysqldump
Без локального доступа к серверу существует ли какой-либо способ дублировать/клонировать базу данных MySQL (с содержимым и без содержимого) в другую без использования mysqldump ?
В настоящее время я использую MySQL 4.0.
Использование MySQLi-что лучше для закрытия запросов
У меня есть привычка сводить использование переменных к минимуму. Поэтому мне интересно, есть ли какое-либо преимущество, которое можно получить следующим образом:
$query = $mysqli->query('SELECT * FROM `people` ORDER BY `name` ASC LIMIT 0,30');
// Example 1
$query = $query->fetch_assoc();
// Example 2
$query_r = $query->fetch_assoc();
$query->free();
Теперь, если я прав, Пример 1 должен быть более эффективным, поскольку $query - это unset , когда я переназначаю его, что должно освободить любую память, связанную с ним. Однако есть метод (MySQLi_Result::free()), который освобождает ассоциированную память - это одно и то же?
Если я не вызываю ::free() , чтобы освободить память, связанную с результатом, но unset , переназначив переменную, я делаю то же самое? Я не знаю, как регистрировать такие вещи - у кого-нибудь есть идеи?
Новый проект: MySQL или SQL 2005 Экспресс
Я начинаю новый клиент / серверный проект на работе, и я хочу начать использовать некоторые из новых технологий, о которых я читал, LINQ и Generics являются основными из них. До сих пор я разрабатывал эти типы приложений с MySQL, поскольку клиенты не хотели платить большие лицензионные расходы за MSSQL.
Я немного поиграл с экспресс-версиями, но на самом деле никогда ничего с ними не разрабатывал. Новое приложение будет иметь не более 5 одновременных подключений, но будет необходимо для ежедневной отчетности.
Можно ли еще загрузить MSSQL 2005 express? Кажется, я не могу найти его на сайте microsoft. Я бы не решился использовать MSSQL 2008 в проекте так скоро после его выпуска.
Если экспресс-версия адекватна моим потребностям, я уверен, что множество людей, читающих это, использовали их. У вас возникли какие-то проблемы?
MySQL vs PostgreSQL для веб-приложений
Я работаю над веб-приложением, использующим Python (Django), и хотел бы знать, будет ли MySQL или PostgreSQL более подходящими при развертывании для производства.
В одном из подкастов Джоэл сказал, что у него были некоторые проблемы с MySQL, и данные не были согласованы.
Я хотел бы знать, были ли у кого-то такие проблемы. Кроме того, когда речь заходит о производительности, которую можно легко настроить?
Существует ли задача rake для резервного копирования данных в вашей базе данных?
Существует ли задача rake для резервного копирования данных в вашей базе данных?
У меня уже есть резервная копия моей схемы, но я хочу сделать резервную копию данных. Это небольшая база данных MySQL.
Поддерживает ли MS-SQL таблицы в памяти?
Недавно я начал изменять некоторые из наших приложений, чтобы поддерживать MS SQL Server в качестве альтернативного бэк-энда.
Одна из проблем совместимости, с которой я столкнулся,-это использование функции MySQL CREATE TEMPORARY TABLE для создания таблиц в памяти, которые содержат данные для очень быстрого доступа во время сеанса без необходимости постоянного хранения.
Что такое эквивалент в MS SQL?
Требование состоит в том, что мне нужно иметь возможность использовать временную таблицу так же, как и любую другую, особенно JOIN с постоянными таблицами.
Группа SQL с заказа
У меня есть таблица тегов, и я хочу получить самый высокий счетчик тегов из списка.
Примерные данные выглядят следующим образом
id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')
с помощью
SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`
возвращает мне данные, которые я ищу совершенно. Однако я хотел бы организовать его так, чтобы самые высокие значения тегов были первыми, и ограничить его отправкой мне только первых 20 или около того.
Я попробовал это сделать...
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
и я продолжаю получать "Invalid use of group function - ErrNr 1111"
Что я делаю не так?
Я использую MySQL 4.1.25-Debian
Как выбрать посты с определенными тегами / категориями в WordPress
Это очень конкретный вопрос, касающийся MySQL , как он реализован в WordPress .
Я пытаюсь разработать плагин, который будет показывать (выбирать) сообщения, которые имеют определенные "теги" и принадлежат к определенным "категориям" (оба несколько)
Мне сказали, что это невозможно, потому что так хранятся категории и теги:
wp_postsсодержит список должностей, каждая должность имеет "ID"wp_termsсодержит список терминов (как категорий, так и тегов). Каждый термин имеет двигатели СМД -wp_term_taxonomyимеет список терминов с их TERM_IDs и имеет определение таксономии для каждого из них (либо категория, либо тег)wp_term_relationshipsимеет связи между терминами и должностями
Как я могу присоединиться к таблицам, чтобы получить все записи с тегами "Nuclear" и "Deals", которые также относятся к категории "Category1"?
Как обойти неподдерживаемые целочисленные типы полей без знака в MS SQL?
Пытаясь сделать приложение на основе MySQL поддержкой MS SQL, я столкнулся со следующей проблемой:
Я сохраняю auto_increment MySQL как целочисленные поля без знака (разных размеров), чтобы использовать полный диапазон, поскольку я знаю, что никогда не будет отрицательных значений. MS SQL не поддерживает атрибут unsigned для всех целочисленных типов, поэтому мне приходится выбирать между удалением половины диапазона значений или созданием обходного пути.
Одним из очень наивных подходов было бы поместить некоторый код в код абстракции базы данных или в хранимую процедуру, которая преобразует между отрицательными значениями на стороне БД и значениями из большей части диапазона без знака. Это, конечно, испортит сортировку, а также не будет работать с функцией автоматического идентификатора (или это будет каким-то образом?).
Я не могу придумать хороший обходной путь прямо сейчас, есть ли он? Или я просто фанатик и должен просто забыть о половине диапазона?
Редактировать:
Вудхаус: да, наверное, ты прав. В моей голове все еще звучит голос, говорящий, что, возможно, я смогу уменьшить размер поля, если оптимизирую его использование. Но если нет простого способа сделать это, вероятно, не стоит беспокоиться об этом.
Географически распределённый MySQL
Приветствую all.
Есть желание географически распределить проект, и начать с одной из его состовляющих: MySQL. Интересны ответы тех, кто вплотную работал с этой БД и не в теории знает как работают различные схемы географически распределенной балансировки.
Текущая схема примерно следующая: один веб-сервер и два сервера БД в режиме «master-slave». К одному идут запросы только на чтение, к другому преимущественно на запись, оба сервера БД стоят рядом и соединены кроссом. Есть идея сделать схему немного посложнее и ввести в строй еще несколько серверов в другой стране, при этом настроить репликацию БД. Каналы и там и там хорошие, но задержки уже больше чем при соединении серверов «попа-в-попу». Кто реализовывал такие схемы: что можете сказать?
- Реально или есть какие-то известные проблемы?
- Может репликационный трафик можно как-то жать, для экономии канала?
- Стоит использовать встроенный в MySQL ssl или лучше паковать все в OpenVPN?
- Какие подводные (или даже вполне надводные) камни встретятся, если к этому еще прибавить master-master?
- Кто чего скажет о кластерных типах БД в MySQL?
Добавлю, что в первую очередь, естественно интересуют практические знания, чем теоретические.
464   6   02:37, 23rd August, 2020
Транзакции, инкрементирование и MySQL UPDATE
Является ли в MySQL операция инкрементирования в UPDATE транзакционно-безопасной? Возможно ли состояние гонки, когда несколько клиентов одновременно выполняют запрос вроде «UPDATE mytable SET myfield=myfield+1 WHERE id=myid»? Если тысяча клиентов одновременно выполнят такой запрос на строке с базовым значением 0, то будет ли в конце значение равно тысяче?
Речь о InnoDB.
Как защитить БД с критичными данными от произвола медленных запросов?
Ситуация: есть боевой сервер, на нем — вебсервер и MySQL. С мусклем взаимодействуют, во-первых, PHP-скрипты выполняющиеся под апачем на этом сервере, а во-вторых — удаленные пользователи через TCP. Работают они с одной и той же базой. Однако, работоспособность связки «локальный апач плюс мускль» критична, а «удаленные юзеры плюс мускль» — нет.
«Удаленный» юзер запускает корявый запрос — например, REGEXP селект по неиндексированному столбцу на 20 млн строк. При этом в течение 3-5 минут тормозят все остальные запросы к этой базе, которые при обычных условиях летают. В итоге критичная веб-часть перестает отвечать с приемлемой скоростью. Как сделать так, чтобы удаленные юзеры могли посылать говнозапросы без вреда функционированию локальных подключений к БД? «Локалка» и «удаленщики» коннектятся к БД разными юзерами. Разнести базу на две — вариант не устраивает. Запас производительности на сервере есть (8 ядер, 24 гига памяти).
Инфраструктура под высокие нагрузки
Добрый день, коллеги. Готовимся к запуску одного проекта, к сожалению, по NDA не могу рассказать что за проект, позже, после старта, напишу пост, но появилась проблема.
К моменту старта мы ожидаем высокие нагрузки и нам немного сложно оценить необходимую инфраструктуру под них. В пике мы ожидаем ~5 млн MySQL запросов в минуту (60% Select / 40% Insert). Запросы по себе довольно простые т.е. без сложных выборок и т.д. Подскажите пожалуйста оборудование, которое все это переварит. Нам предложили 2 8-и гиговых кор 2 дуо под веб и 3 8-и гиговых кор 2 дуо под базу данных.
Заранее спасибо
Как выбрать одним запросом 5 последних записей каждой категории в MySQL?
Здравствуйте.
Допустим у нас есть таблица следующей структуры: id, cid, title.
Может есть какой-нибудь элегантный способ выбрать одним запросом 5 последних записей каждой категории(cid)?
MySQL и оперирование с рейтингом игроков
Допустим есть табличка с игроками, где у каждого игрока есть поле «score».
И мы хотим создать общий рейтинг игроков с сортировкой по этому полю.
Вопрос в том, можно ли как-то получить позицию заданного игрока в этом рейтинге? Т.е. есть игрок со score=12 и при сортировке по этому полю он будет в списке всех игроков на 50000-м месте.
Можно как-то определить это самое место легким движением руки?
Или вариант тут только один — раз в N времени выполнять проход по отсортированной таблице и запоминать рейтинги?
Объемы данных планируются от 100 тыс. юзеров до миллиона. Каким вообще образом создаются отсортированные рейтинги при таких больших объемах?
Инфраструктура под высокие нагрузки
Добрый день, коллеги. Готовимся к запуску одного проекта, к сожалению, по NDA не могу рассказать что за проект, позже, после старта, напишу пост, но появилась проблема.
К моменту старта мы ожидаем высокие нагрузки и нам немного сложно оценить необходимую инфраструктуру под них. В пике мы ожидаем ~5 млн MySQL запросов в минуту (60% Select / 40% Insert). Запросы по себе довольно простые т.е. без сложных выборок и т.д. Подскажите пожалуйста оборудование, которое все это переварит. Нам предложили 2 8-и гиговых кор 2 дуо под веб и 3 8-и гиговых кор 2 дуо под базу данных.
Заранее спасибо
Как выбрать одним запросом 5 последних записей каждой категории в MySQL?
Здравствуйте.
Допустим у нас есть таблица следующей структуры: id, cid, title.
Может есть какой-нибудь элегантный способ выбрать одним запросом 5 последних записей каждой категории(cid)?
MySQL и оперирование с рейтингом игроков
Допустим есть табличка с игроками, где у каждого игрока есть поле «score».
И мы хотим создать общий рейтинг игроков с сортировкой по этому полю.
Вопрос в том, можно ли как-то получить позицию заданного игрока в этом рейтинге? Т.е. есть игрок со score=12 и при сортировке по этому полю он будет в списке всех игроков на 50000-м месте.
Можно как-то определить это самое место легким движением руки?
Или вариант тут только один — раз в N времени выполнять проход по отсортированной таблице и запоминать рейтинги?
Объемы данных планируются от 100 тыс. юзеров до миллиона. Каким вообще образом создаются отсортированные рейтинги при таких больших объемах?
Посоветуйте программу для моделирования БД MySQL под Ubuntu
Нужна программа для проектирования БД MySQL с графическим отображением связей и автоматической генерацией кода для создания таблиц.
Есть ли такая под Линукс и какая лучшая, удобная для новичка?
Бекапы версий контента при создании статьи как реализовать? (PHP, MySql)?
К примеру в вордпрессе есть такая фишка

То есть на каждую статью приходится несколько версий, сохраненных через некоторый интервал с возможностью отката на каждую из них. Подскажите пожалуйста, как это грамотно реализовать средствами PHP и MySQl! Спасибо
Выборка разом топ рубрик и определенного кол-ва топ-наименований по каждой из рубрик
Уважаемые коллеги!
Вот уже несколько дней думаю над запросом.
Есть таблица с рубриками и таблица с наименованиями. У каждой рубрики и наименования есть поле рейтинга.
Делаю выборку наименований с их рубриками.
Задача в том, чтобы выбрать ТОП 3 наименования из ТОП 3 рубрик. Другими словами хочу чтобы результат примерно был таков:
фильмы | аватар | рейтинг рубрики 10 | рейтинг наименования 100 |
фильмы | крестный отец | рейтинг рубрики 10 | рейтинг наименования 90 |
фильмы | звездные войны | рейтинг рубрики 10 | рейтинг наименования 60 |
сериалы | доктор хаус | рейтинг рубрики 8 | рейтинг наименования 200 |
сериалы | тбв | рейтинг рубрики 8 | рейтинг наименования 40 |
сериалы | интерны | рейтинг рубрики 8 | рейтинг наименования 10 |
мультфильмы | жил был пёс | рейтинг рубрики 5 | рейтинг наименования 90 |
мультфильмы | том и джерри | рейтинг рубрики 5 | рейтинг наименования 80 |
мультфильмы | бурума свергли с престола | рейтинг рубрики 5 | рейтинг наименования 66 |
В продакшене, разумеется всех сущностей больше, но суть раскрыта.
Есть ли красивое решение?
Как спасти данные после правки конфига MySQL
Поправил конфиги MySQL на VDS. Сразу же обвалились все базы, MySQL ругался на некорректные данные в frm файлах. Прочитал что это нормально, надо было сразу настраивать как нужно, сейчас только дамп-импорт.
Я бы хотел поинтересоваться у знающих как можно восстановить базы без лишних телодвижений? В ручную дампить 30+ баз и импортировать потом обратно както неохота. Есть советы?
Транспонирование таблицы SQL
столкнулся с задачей транспонирования таблицы (поворот на 90 градусов).
есть столбцы
A | B | C
1 | 2 | 3
4 | 5 | 6
вывести
A 1 4
B 2 5
C 3 6
в интернетах пишут
«my very strong advice: don't try to do this with SQL»
и пару достаточно «странных» вариантов
Что посоветуете?
Как автоматически делать бэкапы mysql?
Хочу делать mysql бэкапы некоторых баз данных.
Что-бы автоматически делался бэкап, отправлялся на почтовый ящик и скидывался мне на компьютер.
Как можно реализовать?
У меня vps сервер на фрихе.
Как правильно учиться PHP / mySQL?
Я сам учусь программированию на PHP/Mysql, и хочу попросить совета у хабрасообщества.
Вот список литературы что я использую для индивидуальной учёбы:
PHP 5 для чайников (Джанет Валейд)
PHP в подлиннике (Дмитрий Котеров)
PHP полезные приемы ( А.Орлов)
PHP/MySQL для начинающих (Энди Харрис)
MySQL полное руководство. Второе издание (Поль Дюбуа)
Вопрос таков: Я правильные книги выбрал?
Порой читаю книгу и складывается ощущение, что автор писал что бы только продать книгу и получить прибыль.
Разумеется опытный программист понимает все что в книге написано, но где именно так книга в которой чётко объясняют тот или иной сайт, как он устроен, через какие операторы и что работает.
Ведь проще понять на примерах чем читать длинный текст про то как хорошо работает функция на одном примере и все.
Посоветуйте пожалуйста.
Может будет у кого нибудь ссылка на интерактивные видео курсы?
Как мигрировать базу данных с индексами и внешними ключами с MySQL на HSQLDB?
В базе около 2 миллионов записей, в MySQL все это счастье с индексами занимает около 300 мегабайт.
Муки выбора PHP-фреймворка для разработки сайта, ориентированного на мобильных пользователей
Привет,
Возникло желание изобрести велосипед сделать некий весьма ёмкий сайт для мобильных устройств (смартфонов и им подобных) — т.е., html-ный. Есть желание реализовать на PHP, в связи с чем возникает вопрос: каким PHP-фреймворком воспользоваться?
Пожеланий крайне немного:
- Не заумная документация (можно даже на русском :))
- Наличие легкого MVC
- Поддержка (реализация?) i18n
- Легкий интерфейс к БД (mysql): мне все еще кажется, что зачастую запрос можно написать и руками; еще мне кажется, что у ZF с DBA перемудрили
- (желательно) Отсутствие излишеств :)
Городить с самого начала — очевидно, потеря времени. Разбираться во всем многообразии — с ума сойти можно. Может, порекомендуете?
Спасибо.
Как понять почему тупит MySQL?
Сервер C2Q x 2 8G ram. RAID 5( 3 hdd ), mysql 5.1.26-rc \ Red Hat 4.1.2-14
Когда собирали(два года назад) были молодыми и глупыми, но сервер вообще влезает в свои параметры.
Итак имеем относительно высокую нагрузку на MySQL — 601.90 запросов в секунду, из них апдейты\инсерты — 2%, а ~70% — stmp prepare\execute\close, на долю чистого селекта остается 34.84%
И где-то неделю назад база научилась умирать — создавались кучи процесов которые работали по полчаса.
Странность 1 — ровно через час все чинилось САМО
В общем начались разгребания состояния сервера.
Как один из пунктов этой программы в код движка был добавлен дамп времени выполнения операций в базу обратно в эту базу.
Этот код работал для запросов которые заняли дольше 0.1 сек — slow_log их еще не видит, но это уже тормоза…
В общем тут и пошли странности — самый обычный запрос, который, запусти его ручками, выполняется 0.0001 репортит в базу что он выполнялся 0.5 или даже ДВЕ секунды…
Странность номер два — тормоза идут мелкими сериями, по 5-10 тормознутых запросов, примерно раз в 11 секунд.
И в этот момент, обычно, только несколько таблиц торомозят( тоесть я вижу пачку по сути одинаковых запросов в логе в этот момент)
Так как 99 тормозных запросов приходились на innoDB таблицы были проведены некоторые танцы — включен file_per_table и таблицы из обшей свалки(11Гб) перевелись в свои маленькие файлики( конечный общий размер 4Гб, фрагментация там была дайбоже )
LA сервера, 0.9
утилизация винта — 15-20%
Конфиг тут
Свободная память — есть.
Идей откуда тормоза и что делать — нет
Как вариант — Percona или MariaDB (5.1.6?)
Бонус пак — когда mysql зависает — конекты от него не отваливаются, процесы не завершаются.
Никак кроме как kill -9....
Схема хранения изменяющихся данных с историей
Есть около 300 тыс объектов ( например легковых автомобилей) для каждого автомобиля раз в неделю производится замер параметров ( пробег, давление в шинах, количество топлива), параметров будет в районе 20 штук, нужно все это хранить в базе.
В освновном пользователей интерисуют только последние параметры. Но иногда необходимо отвечать на вопросы типа «А как менялось давление в шинах во времени», «А какие параметры менялись на прошлой неделе»
Интуиция говорит, что наверное надо смотреть в сторону mongo, но тех задание явно говорит, что будем использовать Mysql :)
Пока родилось два варианта
1)
Первая таблица (название data)
id| object_name | param1 | param1_is_changed | param1_change_date | param2…
Вторая таблица (название data_history)
id| object_name | param1 | param1_is_changed | param1_change_date | param2… | version | change_date
При каждом изменении любого параметра, предыдущая версия записывается в data_history, у того параметра который изменился ставится влажок is_changed
2) Первая таблица (название data)
id| object_name
Вторая таблица ( хранит только последние значения)
id | object_id | param_name | param_value | date
Третья таблица ( хранит историю значений из второй таблицы)
Сейчас мы отслеживаем около 50 тыс объектов, в неделю происходит около 200 изменений в параметрах. Все параметры числовые, поэтому вопрос избыточности хранения в первом случае волнует только в плане производительности БД, но никак не места на диске. Второй метод вроде хорош, но его не очень просто реализовать используя ORM.
Ваше мнение? как спроектировать DB? как найти компромисс между эффективной БД и удобством написания приложения к ней.
Sphinx или Яндекс.Сервер?
Собственно сабж. Текста много(4000 тысячи статей, 8 тысяч названий).
Крутится всё с использованием СУБД mysql на linux 2.6.
Интересует, как у обоих продуктов дела с потреблением памяти и качеством выдачи.
Какова судьба стартапа, организованного вместе с близкими людьми?
Здравствуйте!
Давно мучает вопрос:
«Какова судьба стартапа, организованного вместе с близкими людьми?»
Например: с другом или своей девушкой?
Может быть у кого-то был реальный опыт и может поделиться советами.
P.S. Вопрос был расширен деталями из реальной жизни и создан отдельный топик.
Спасибо!
Mysql update множественное обновление одним запросом
Здравствуйте, заранее извинюсь если кому то этот вопрос покажется детским.
Требуется обновить 5 записей в одной таблице в разных строках.
Тоесть SET filed=1 where id=1, SET filed=2 where id=12, SET filed='0.5' where id=3…
Описал как мог. Буду очень признателен если натолкнете на путь истинный
Удаление mysql-binlog'ов?
Можно ли удалить binlog'и без опаски за репликацию БД? Что в этом случае делать с mysql-bin.index?
Заранее спасибо за ответы.
Блокировка при транзакции в mysql, как она работает?
У меня есть таблица images с 3-я колонками: id, product_id и cover. В ней, допустим, очень много записей, которые постоянно читаются. Т.е. не хотелось бы чтобы таблица блокировалась.
В таблице есть 100 записей (с product_id=777), у одной из которых cover=1, а у остальных 99-ти cover=0. Тут внезапно я захотел установить признак cover к другой картинке, и обнулить у текущей, и написал запросы:
BEGIN;<br/>
<br/>
# Сначала сбрасываю обложку у товара №777<br/>
UPDATE images SET cover=0 WHERE product_id=777 AND cover=1 LIMIT 1;<br/>
<br/>
# Устанавливаю новую обложку для товара (AND product_id=777 тут для наглядности)<br/>
UPDATE images SET cover=1 WHERE id=5000 AND product_id=777 LIMIT 1;<br/>
<br/>
COMMIT;
Так вот, означает ли, что при такой транзакции заблокируются только все записи товара с product_id=777, а не вся таблица целиком?
BEGIN;<br/>
<br/>
# Сначала сбрасываю обложку у товара №777<br/>
UPDATE images SET cover=0 WHERE product_id=777 AND cover=1 LIMIT 1;<br/>
<br/>
# Устанавливаю новую обложку для товара (AND product_id=777 тут для наглядности)<br/>
UPDATE images SET cover=1 WHERE id=5000 AND product_id=777 LIMIT 1;<br/>
<br/>
COMMIT;
Отсеивание дублей строк с Mysql?
Здравствуйте,
Встала задача раздублить около 60гб строковых данных. Уникальных среди них около 25-30%
Решили использовать mysql с уникальным индексом для этого.
Вопросы:
1. Уникальным лучше делать поле с самой строкой (1-5 слов) или же оптимальней считать сначала crc32 от этой строки, и уже на хеш вешать уникальный индекс?
2. Можно ли применить некое курстарное подобие партиционирования, но не на уровне таблиц, а на уровне БД?
Например, делить данные по первой букве строки (получим 28 физических баз), и одновременно заполнять только одну из них, тем самым уменьшая потребление RAM?
Как выбрать случайную запись из базы MySQL без использования первичного ключа и order by rand()
Возникла такая проблема, есть база данных в которой содержатся пользователи (юзеры установившие приложение вконтакте, если быть точным), в качестве Primary key используестся id пользователя в социальной сети, который можно считать случайным числом. Нужно выбрать из базы одного случайного пользователя. Пользователей в базе много поэтому order by rand() использовать слишком накладно, генерировать случайное число и выбирать запись с таким id тоже не получится, учитывая что id идут не по порядку. Как быть в такой ситуации? И заодно, как быть если нужно несколько случайных пользователей?
Поиск MySQL, как?
Здравствуйте.
Есть таблица вида:
ID | COUNT | DATA | DATE | TYPE | IP
Каждый день в базу добавляется около 500 тысяч записей.
Как можно сделать поиск по полю DATA быстрым и сколько времени будет занимать поиск по такой огромной базе через неделю, месяц?
Стоит ли использовать Mongo?
Приветствую!
В последнее время все чаще слышу упоминания про NoSQL и MongoDB в частности. Тема меня заинтересовала, но вот пока не могу найти интересующей меня информации, поэтому спрошу здесь — наверняка уже многие успели поэкспериментировать, а может и разработать серьезные высоконагруженные приложения в связке с MongoDB.
Заранее предупрежу, если где-то я ошибся в отношении MongoDB — я не специально. Просто я с ней еще даже не пытался работать, а лишь почитывал статьи на Хабре, да те примеры, что лежат на оф.сайте.
Сейчас я занимаюсь разработкой тизерной сети. Задача, на первый взгляд кажущаяся тривиальной, на деле выходит довольно хитровыделанной в плане организации структуры БД. Огромное кол-во связей, множество таблиц-посредников для связей М-М и т.д… Чем меня привлекла идея MongoDB, так это своим принципом построения связей. Вопрос №1:
действительно ли работа с МонгоБД при наличии кучи связей менее затратна в плане ресурсов? Ну, хотя бы на простейшем примере (буду писать на «псевдо SQL») — выборка из 2 таблиц, связанных отношением М-М через промежуточную таблицу:
table sites(
id int primary key auto_increment,
url varchar
)
table categories(
id int primary key auto_increment,
name varchar
)
table sites_categories(
site_id int,
category_id int
)
Задача вывести список сайтов и категорий, в которых он есть:
SELECT * FROM sites
while(SITE = mysql_result...)
{
//отображаем данные сайта
SELECT * FROM categories WHERE id IN (SELECT category_id FROM sites_categories WHERE site_id = SITE)
//в цикле отображаем категории
}
Также меня интересует, можно ли работать одновременно с MySQL и MongoDB? Вернее, насколько это будет правильно? Полностью переносить БД на Монго не хочется, лишь отдельные, особо-хитрые участки, нагрузка на которых выше, чем хочется.
Также читал, что в MongoDB можно беспроблемно хранить файлы — действительно ли это так и что же будет лучше — хранить по-старинке в специальной папке с подкаталогами по именам/ид пользователей, или использовать MongoDB? (допустим, при таком раскладе: пользователей около 1к, у каждого 40-50 небольших картинок. картинки отдаются в кол-ве примерно 100-150 в минуту.
P.S.: прошу прощения за возможные неточности в вопросах, излишнюю или недосказанную информацию о нуждах и текущем положении дел, разработка структур БД — не мое основное достоинство…
Как удачнее спроектировать базу данных?
делаю небольшой сайтик для нескольких групп в универе. страничка с расписанием, файловый архив, и прочие радости. возник вопрос касательно каждодневного расписания. на страничке каждой группы будет висеть её расписание на завтра (по желанию — на любой день). на данный момент, существует две таблицы, но они пока никак не связаны друг с другом:
subjects (список предметов)
subjId (уникальный номер предмета)
subjName (полное название предмета)
groups (список групп)
groupId (уникальный номер предмета)
subjName (название группы)
необходимо сопоставить каждой отдельно взятой группе список предметов на понедельник\вторник\etc…
знание php и mysql — на начальном уровне. посему, хотел поинтересоваться у гуру, как удачнее спроектировать БД.
Как работать с постоянно изменяющейся базой в системе контроля версий?
Используем subversion, MySQL, NetBeans.
Хотелось бы чтобы окромя кода база тоже находилась бы в svn. База проекта обновляется достаточно часто. Как с наименьшими трудозатратами обновлять, фиксировать и т.п. таблицы, процедуры, вьюшки и т.п.?
Как сортировать внутри GROUP BY?
Сортировка внутри GROUP BY
CREATE TABLE `oper` (
`id_num` int(10) unsigned NOT NULL auto_increment,
`id_country` int(10) unsigned NOT NULL,
`cost` decimal(4,2) unsigned NOT NULL default '0.00',
PRIMARY KEY (`id_num`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
id_num id_country cost
1 1 1
2 1 2
3 1 3
4 1 4
5 2 5
6 2 6
7 2 7
8 2 8
надо выбрать самые дорогие номера по странам и их ид
select id_num, id_country, max(cost) from oper group by id_country
выдает вот такую штуку
id_num id_country max(cost)
1 1 4
5 2 8
тоесть цены выбирает верные, но ид номера никак не соответствует ценнику, должно быть так
id_num id_country max(cost)
4 1 4
8 2 8
VoIP Ubuntu автодозвон
Хочу реализовать «сервис» будильника — чтобы в назначенное время ubuntu звонила через voip на мобильные телефон.
Есть какие-нибудь идеи?
MYSQL. Удалить дубли строк?
Есть таблика с 100.000 строк.
Нужно удалить дубли строк(именно строк а не ячеек)
то есть чтобы от таблицы:
c1 c2
1 2
1 0
4 2
1 0
1 1
2 1
Осталось:
c1 c2
1 2
1 0
4 2
1 1
2 1
Одну строчку (1 0) нужно удалить так как из было 2.
Можно ли это сделать запросом или без php не обойтись?
Спасибо.
Требуется помощь по составлению запроса Mysql
Есть таблица со статистикой в ней 3 поля (id, time, user_id)
Помогите собрать один запрос, чтобы выбирать COUNT(id) WHERE time (разбит по часам) за последние 7 дней с группировкой по user_id. Просто у меня получается жуткая портянка с кучей вложенных запросов, может есть более грамотное решение
Как синхронизировать версию базы данных MySQL и кода веб-приложения при разработке?
Исходные данные:
1) веб-приложение на php (ну да это не важно на каком языке), лежащее в git (ну или другой CVS)
2) база данных MySQL
3) Весь SQL-код хранится в БД в виде хранимых процедур.
Как поддерживать синхронизацию кода приложения и структуру БД и хранимые процедуры?
С процедурами дело конечно обстоит проще — можно каждую процедуру положить в отдельный файл, который отслеживается в git (ну или другой CVS)
А вот как быть со структурой таблиц? Генерить ручками при каждом изменении ALTER TABLE и класть их в отдельные файлы — трудоемко.
Может есть какие-то утилиты, которые позволяют делать это автоматически, а-ля Oracle Database Version Control?
Хочется иметь возможность при обновлении версии приложения — выполнить один sql-скрипт, который обновит базу данных. Если конечно такое возможно.
Полный SQL-дамп для IBM DB2?
По работе пришлось столкнуться с творчеством ibm, а именно — db2 9.7…
Вопрос следующего характера: как сделать полный дамп базы в db2, включая структуру, данные, процедуры и прочую логику? как свалить это все в файл, аналогичный по структуре дампу MySQL? db2look сохраняет только структуру, насколько я понял.
И, возможно, кому-то уже приходилось конвертировать базы между mysql и db2, какой продукт стоит для этого использовать и насколько это работоспособно?
MySQL+ выполнение внешних команд при определенных событиях, возможно?
Если вкратце есть комерческий пхп-скрипт в код которого вмешатся нельзя(zend), но нужно добавить небольшой функционал. Вот возникла идея написать скрипт( на питоне например) добавляющий нужный функционал и запускать его когда основной скрипт вносит данные в БД. Потому и возник вопрос возможно ли в mysql повесить выполнение команды на insert/update в определенную таблицу, в идеале с передачей некоторых значений из добавленных данных в качестве параметров скрипту?
В бд будут добавлятся записи с определенным описанием контента в папках фс и линк на эти папки, скрипт же должен создавать определенный файл-отчет на основании контента папки и сохранять его в корне этой папки.
Ну и доп вопрос — сколько примерно такая доработка может стоить?
Поменять местами 2 строки в таблице mysql
Всем привет!
Есть таблица, например, с полями Id (int auto_increment) Name
Как с помощью sql запроса поменять местами Id у двух строк?
ЗЫ Хороших выходных :)
Выбрать значения которых нет в таблице
Здравствуйте.
В таблице значения колонки item_id состоят из номеров 1, 2, 3, 4. У меня есть список из чисел 2, 3, 5. Нужен такой запрос который вернёт только 5, то есть значения которого нет в таблице но есть в запросе.
Не пойму как это сделать такой запрос?
Понятно когда данные в двух таблицах, но когда список в запросе запрос становится не очевидно.
Запрос на обновление с условием?
Добрый день!
Люди добрые подскажите как в mysql возможно запрос на обновление с условием написать?
Например, если в поле 1 то заменяем его на 2, если 2 то заменяем на его 1.
В поле находится буква «b» и «пусто», мне надо так скажем поменять местами, т.е. букву b заменить на «пусто», а «пусто» заменить на «b».
Sphinx и связанные таблицы
СУБД MySQL.
Есть 2 таблички: компании (company) и адреса (adress).
Связаны между собой отношением один ко многим. — т.е. у одной компании может быть несколько адресов.
У каждого адреса есть координаты: x, y (хранятся как float).
Хочу найти компании, адреса, которых находятся в некой прямоугольной области (то есть необходимо, чтобы x и y находились в заданном диапазоне).
Также необходимы некоторые ограничения на компании (с ними разобрался), поэтому использую для индекса табличку именно с компаниями, а не адресами.
Вот чего точно не получится:
— sql_attr_multi не поможет — он умеет работать только с типами uint, timestamp
— sql_joined_field работает только с текстом.
Остается только отсекать у x,y 3-4 знака и переводить их в integer, а затем использовать sql_attr_multi — но этого очень не хочется делать.
Однако, может есть какой-нибудь альтернативный путь? Со sphinx знаком всего 1 день, поэтому всех его возможностей не знаю.
PHP, MySQL. антиповтор
Суть такая:
Есть база в которую заносится например имя автора (пользователем).
Пользователь может ввести: Пушкин, Пушкин Александр, Александр Сергеевич Пушкин, Пушкин А С, А С Пушкин (ну вы поняли. Как с этим грамотнее бороться? Чтоб не было как в VK и подобных.
Способ хранения файлов: MySQL, NoSql или что-нибудь еще?
Здравствуйте.
Продумываю систему и встали следующие задачи. Необходимо:
1. Хранить около миллиона html фалов
2. Столько же текстовых файлов
3. zip, pdf файлы
4. Необходим поиск по текстовым и html файлам
Если это имеет значение, то имею некоторый опыт по использованию связки mysql+sphinx.
Масштабируемость нужна примерно до 10 миллионов html и столько же текстовых файлов.
Какие решения можете посоветовать?
1. Где и как лучше хранить html и txt файлы?
2. Где и как лучше хранить архивы и pdf?
3. Как хранят данные, к примеру, поисковые системы? Где почитать?
MySQL vs PostgreSQL?
Кратко о проекте:
— выборка по большому количеству условий
— много инсертов
— высокие нагрузки
— без права на ошибку
MySQL или PostgreSQL?
Комплексное решение?
Другие варианты?
NoSQL?
Проблемы с WordPress MU
Всем добрый вечер!
Недавно пробовал запустить на сервере WordPress MU, т.е. мультисайтовый вариант этой CMS. Первый день полет шел нормально, но потом начались проблемы. Сервер выпадал в глубокие задумчивости когда я обращался к чему-либо. Судя по всему мультисайтинг создавал кучу запросов к БД и накапливая их пытался повесить сервак.
Кто-то сталкивался? Может решал как-то? Заранее спасибо.
apache2, mysql и автозапуск(Ubuntu 10.04)
Ubuntu 10.04
LAMP ставил еще на ubuntu 9.10, но когда обновился до 10.04 апач, мускул исчезли из автозапуска. Некоторое время я не обращал внимания и запускал их командой:
sudo /etc/init.d/apache2 start
ну mysql соответственно.
Решил сегодня все-таки поиграться с ними и как-то вернуть автозапуск, гуглил но так ничего и не вышло, про upstart вообще не понятно
Потом решил удалить полностью LAMP и вместе с ними удалил эти скрипты apache2 и mysql в /etc/init.d, непонятно зачем я это сделал… Поставил заново по этой хавту forum.ubuntu.ru/index.php?topic=25668.0 LAMP, но опять в автозапуск у меня ничего не прописалось, и без тех скриптов которые были в /etc/init.d я теперь даже запустить апач не могу( Что делать? Как вернуть эти скрипты и прописать апач с мускулом в автозапуск. Надеюсь вы мне не будете советовать все это дело воткнуть в «Запускаемые приложения» :)
Будет ли биться MyISAM при синхронизации?
Сейчас синхронизирую базы с удаленные серваком останавливая мускул и запуская rsync. Но базы растут и с ними растет и время простоя.
Вопрос в том насколько велика вероятность получить битые таблицы если не останавливать мускул на период синхронизации? А если сначала сделать LOCK TABLES? А потом еще прогонять проверку. Из активности в база на 99% SELECT-ы.
PS. Я прекрасно знаю про дампы и про репликацию и активно их использую, но в данном случае это неоправданно сложно.
Утилита для бекапов под linux
Разыскивается утилита для выполнения бекапов сайтов на локальную машину под linux.
Требования:
- Работа по ssh на опциоанльном порту
- Наличие шедулера
- Желательно наличие гуи
Сейчас работаю с одним серврером, в будущем желательно иметь возможность работы с несколькими.
Нигде не нашел хороших описаний программ, только их перечни без сравнений. Пробовать все подряд долго. В принципе подойдет и консольная утилита, если есть хорошее руководство к действию.
MySQL — Синхронизация нескольких потоков
Имеется задача: вставить N элементов в таблицу, но перед этим удостовериться, не добавлены ли уже такие элементы.
Т.е. сначала делаем что-то вроде:
SELECT COUNT(*) FROM xxx WHERE x IN (x1,x2,x3,x4,x5,x6…… x1000);
Если результат равен 0, то значит можно делать такой же массовый INSERT.
Но есть проблема — как сделать это секурно при многопоточности?
Т.е., допустим, как избежать ситуации, когда одновременно получаются 2 потока и порядок действий получается таким:
П1: SELECT COUNT(*) — получает «0»
П2: SELECT COUNT(*) — получает «0»
П1: делает INSERT
П2: т.к. получил «ноль» в предыдущем селекте, тоже делает INSERT дублирующих записей
Есть ли решение для такой задачи?
Идея выставлять какой-то глобальный флаг кажется очень кривой и глупой.
Хранимки не предлагайте, т.к. опять-таки — они не спасут от одновременности. Как вообще такие вещи делаются?
Вставлять предполагается порой большие массивы данных по несколько десятков тысяч, так что вероятно, что запросы будут выполняться не слишком быстро и есть вероятность словить баг с одновременной вставкой.
Можно ли получить номер определенной строки при сортировке в MySQL
Пример: у меня есть N пользователей с экспой от 0 до M.
Пользователи отсортированы по убыванию, от M до 0. Можно ли получить номер пользователя с id в этом списке?
Сейчас использую для этого REDIS.ZSET, но было бы интересно узнать решение на MySQL.
Проблемы с MySQL MyISAM — дублирование записей и крэш больших таблиц
Совершенно внезапно на рабочем проекте стали твориться непонятные вещи:
- отваливаются две самые большие таблицы — одна на гигабайт и порядка 70 миллионов записей, другая на 500 мегабайт и 700 000 записей. Примерно 100-1000 инсертов в секунду в первую и 2-5 во вторую. Из второй данные активно select'ятся
- периодически по неизвестным причинам база начинает выдавать ошибку too many connections. Скрипты оптимизированы, один скрипт — один экземпляр соединения (класс БД — «одиночка»)
- сегодня ни с того ни с сего данные начали дублироваться, один запрос проходил от двух до 13 раз. Причем не один какой-то запрос, а сразу несколько, которые идут друг за другом.
Скрипты проверил, всё в порядке, давно ничего не менялась, проект со средней посещаемостью. Никаких всплесков за сегодня нет.
Сервер выделенный, настройки стандартные, ОС — CentOS. Версия MySQL — 5.0.77
В чем может быть причина? Я с подобным никогда не сталкивался, никак не могу понять, что происходит.
Схема таблиц, как организовать рейтинг с плюсами/минусами?
Необходимо сделать рейтинг постов/комментов, как на Хабре.
Имею в виду плюсы и минусы и то, что нельзя головать больше одного раза.
Как организовать схему таблиц в MySQL? Сейчас рейтинг хранится в поле rating у самой записи, но так посетитель может голосовать больше одного раза.
Postfix и отображаемое имя пользователя
Здравствуйте дамы и господа.
Имеется почтовик на базе postfix+dovecot, с прикрученным mysql и вот какой момент меня несколько расстраивает — отображаемое имя пользователя при отправке сообщения.
При использовании почтового клиента всё просто — отображаемое имя задаётся при создании учётки и всё хорошо, а если этому же пользователю нужно вдруг отправить письмо через web-интерфейс — нужно его отдельно указать в настройках web-интерфейса, что не удобно и как то не правильно, ведь учётки почти создаются при помощи postfixadmin и там же при создании задаётся имя пользователя. Вопрос: можно ли как то использовать по-умолчанию имя пользователя, присвоенное при создании в postfixadmin? ну или хотя бы использовать его если не указано никакого имени, ведь все эти данные доступны из БД.
составить SQL запрос
База данных mysql.
таблица, с такими данными (упрощено):
id____ project_id_____year
1________1____________2010
2________1____________2008
3________1____________2009
4________2____________2007
5________2____________2009
Хотелось бы получить вот такой результат:
(данные сгруппированы по project_id и взята строка где year — минимальный)
id________project_id_____year
2____________1___________2008
4____________2___________2007
1________1____________2010
2________1____________2008
3________1____________2009
4________2____________2007
5________2____________2009
2____________1___________2008
4____________2___________2007
Модуль прозрачного кеширования mysql запросов в memcached
Существует ли сабж, как модуль perl?
Хотелось бы делать запросы, не думая, что есть фронтенд в виде memcached, и бэкенд в виде mysql.
Как временно отключить триггеры в mysql 5.0?
Нагуглил вариации на тему
SET @DISABLE_TRIGER = 1;<br/>
SET @DISABLE_TRIGERS = 1;<br/>
SET @DISABLE_TRIGGER = 1;<br/>
SET @DISABLE_TRIGGERS = 1;
Однако они не работают.
Подскажите — есть ли решение у этой задачи?
SET @DISABLE_TRIGER = 1;<br/>
SET @DISABLE_TRIGERS = 1;<br/>
SET @DISABLE_TRIGGER = 1;<br/>
SET @DISABLE_TRIGGERS = 1;
Работа с MyISAM таблицей с кол-вом записей от 10'000'000?
Есть таблица, где хранятся записи о товарах, всего товарах около 10'000'000 — количество может вырасти до 20'000'000.
Вывод работает нормально, но заказчик хочет еще админку к этой базе для анализа товаров, поставщиков и прочего — это будет выглядеть как фильтры для каждого поля бд.
Запрос на создание таблицы:
CREATE TABLE `suppliers_store` (<br/>
`id_suppliers_store` int(11) NOT NULL AUTO_INCREMENT,<br/>
`id_suppliers` int(11) NOT NULL,<br/>
`dt` date NOT NULL,<br/>
`name` varchar(255) NOT NULL,<br/>
`code` varchar(255) NOT NULL,<br/>
`price` double NOT NULL,<br/>
`code_suppliers` varchar(255) NOT NULL,<br/>
`count` int(11) NOT NULL DEFAULT '0',<br/>
`producer` varchar(255) NOT NULL,<br/>
`weight` varchar(255) NOT NULL,<br/>
PRIMARY KEY (`id_suppliers_store`),<br/>
KEY `NewIndex1` (`id_suppliers`),<br/>
KEY `NewIndex2` (`dt`)<br/>
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Вот примерный запрос, с условиями, которые может сгенерировать фильтр:
select ss.*, s.delivery<br/>
from suppliers_store as ss<br/>
join suppliers as s on ss.id_suppliers = s.id_suppliers<br/>
where (ss.dt >= '2010-02-01 00:00:00' and ss.dt <= '2011-02-01 23:59:59') and <br/>
(ss.name like '%панель%' or ss.code like '%панель%') and<br/>
(ss.price > 1000) and<br/>
(ss.count > 0)<br/>
LIMIT 50
Собственно эти фильтры и заставляют mysql каждый раз шерстить всю базу, индексы по полям, как я понимаю, особо не помогут.
Раньше опыта работы с такими объемами не было, насколько mysql подходит для этих целей?
Как можно увеличить скорость поиска по табличке?
CREATE TABLE `suppliers_store` (<br/>
`id_suppliers_store` int(11) NOT NULL AUTO_INCREMENT,<br/>
`id_suppliers` int(11) NOT NULL,<br/>
`dt` date NOT NULL,<br/>
`name` varchar(255) NOT NULL,<br/>
`code` varchar(255) NOT NULL,<br/>
`price` double NOT NULL,<br/>
`code_suppliers` varchar(255) NOT NULL,<br/>
`count` int(11) NOT NULL DEFAULT '0',<br/>
`producer` varchar(255) NOT NULL,<br/>
`weight` varchar(255) NOT NULL,<br/>
PRIMARY KEY (`id_suppliers_store`),<br/>
KEY `NewIndex1` (`id_suppliers`),<br/>
KEY `NewIndex2` (`dt`)<br/>
) ENGINE=MyISAM DEFAULT CHARSET=utf8select ss.*, s.delivery<br/>
from suppliers_store as ss<br/>
join suppliers as s on ss.id_suppliers = s.id_suppliers<br/>
where (ss.dt >= '2010-02-01 00:00:00' and ss.dt <= '2011-02-01 23:59:59') and <br/>
(ss.name like '%панель%' or ss.code like '%панель%') and<br/>
(ss.price > 1000) and<br/>
(ss.count > 0)<br/>
LIMIT 50
mysql_real_escape_string vs mysql_escape_string
Согласно документации, стоит использовать только функцию mysql_real_escape_string.
Насколько я понимаю, это связано в основном с применением юникода и действительно оправдано.
Вопрос: насколько часто ошибается mysql_escape_string и можно ли в языках с нативной поддержкой юникода пользовать своей реализацией вроде:
/**
* Escape string for mysql. Don't use native function,
* because it doesn't work without connect.
*/
exports.escapeStr = function(str) {
return str.replace(/[\\"']/g, "\\$&").replace(/[\n]/g, "\\n")
.replace(/[\r]/g, "\\r").replace(/\x00/g, "\\0");
};
UPD: Вышеприведённый код не полный, в нём присутствуют не все символы, которые нужно экранировать. Давайте будем исходить из того, что replace для \b, \t, \Z, _, % также присутствуют:
exports.escapeStr = function(str) {
return str.replace(/[\\"']/g, "\\$&").replace(/\n/g, "\\n")
.replace(/\r/g, "\\r").replace(/\x00/g, "\\0")
.replace(/\b/g, "\\b").replace(/\t/g, "\\t")
.replace(/\x32/g, "\\Z") // \Z == ASCII 26
.replace(/_/g, "\\_").replace(/%/g, "\\%");
};
/**
* Escape string for mysql. Don't use native function,
* because it doesn't work without connect.
*/
exports.escapeStr = function(str) {
return str.replace(/[\\"']/g, "\\$&").replace(/[\n]/g, "\\n")
.replace(/[\r]/g, "\\r").replace(/\x00/g, "\\0");
};exports.escapeStr = function(str) {
return str.replace(/[\\"']/g, "\\$&").replace(/\n/g, "\\n")
.replace(/\r/g, "\\r").replace(/\x00/g, "\\0")
.replace(/\b/g, "\\b").replace(/\t/g, "\\t")
.replace(/\x32/g, "\\Z") // \Z == ASCII 26
.replace(/_/g, "\\_").replace(/%/g, "\\%");
};
Как лучше всего организавать хранение "нравица"-"не нравица" для статей или постов в базе данных?
Например, голосовать может за один пост один ip адрес, база — мускул, таблицы innoDB.
Нужно организовать хранение голосов в базе с наименьшими затратами ресурсов и с максимальной скоростью подсчета рейтинга для статьи.
Я думаю структура таблицы следующая:
article_id (int 11)
ip (varchar 15)
mark (enum ("-1",«1»))
PrimaryKey по двум первым полям. Скорее всего, можно сделать проще, поделитесь опытом, пожалуйста.
Статьи (мануалы) по распределение нагрузки
Ребят. Помогите пожалуйста найти хорошие статьи по настройке распределения нагрузки web-серверов(apache, mysql, postgresql, nginx) для linux. Тоесть есть некоторое количество серверов и планируется запустить на них lamp и распределять нагрузку между ними
MySQL + Mac, не хочет запускаться сервер?
Леопард 10.6.6, качал мускуль сервер от сюда. Поставил, лезу в системные настройки, пытаюсь стартануть — не получается. Только спрашивает пароль и ничего не происходит. Перезгружал.
Железка — mbp 374.

Что посоветуете?
Вопрос про collations в MySQL?
Имеем таблицу следующей структуры:

В ней содержатся такие данные:

Делаем экспериментальный запрос:
SELECT<br/>
LOWER(`md5_upper_bin`),<br/>
LOWER(`md5_upper_ge_ci`),<br/>
UPPER(`md5_lower_bin`),<br/>
UPPER(`md5_lower_ge_ci`) <br/>
FROM `qwew`
Получаем результат:

Вопрос: почему постфикс _bin у этих полей игнорируется в данном случае? Руководствуясь маном по MySQL, можно ведь сказать, что _bin влияет также на функции преобразования регистра строковых данных, поэтому наличие _bin в названии сравнения должно нивелировать действие функций LOWER и UPPER. Чего на практике же не происходит.
SELECT<br/>
LOWER(`md5_upper_bin`),<br/>
LOWER(`md5_upper_ge_ci`),<br/>
UPPER(`md5_lower_bin`),<br/>
UPPER(`md5_lower_ge_ci`) <br/>
FROM `qwew`
Поле типа BIT
Постараюсь быть конкретным и понятным.
В mysql поле типа bit(2) используется как флаг, т.е. например первый бит — получатель удалил сообщение, второй бит отправитель удалил сообщение, эдакая двойная булевая, вопрос, как изменять отдельно каждый бит, не извлекая предыдущего?
Где-то читал про это, но найти не могу.
Копать в сторону смещений?
Альтернативы DbSimple
Уже год, как пользуюсь в своих проектах DbSimple, но для высоконагруженных проектов хотелось бы что нибудь побыстрее. Что посоветуете?
Учёт количество запросов в БД
Существуют ли такие приложения которые могут точно показать сколько запросов в день было на конкретную БД? (пример MySQL)?
Спасибо
Блокировка страниц при совместном редактировании
Доброго времени суток.
Есть такая структура базы данных

Краткое описание:
users — таблица пользователей.
user_roles — роль пользователя в конкретной свадьбе, пользователь может участвовать в редактировании
нескольких свадеб.
wedding — таблица свадеб.
user_edit_rights — Права пользователя в конкретной свадьбе на редактирование того или иного модуля.
user_module_locks — Блокировки пользователем конкретного модуля
user_right_modules — список модулей которые можно редактирвать.
modules — список всех модулей на сайте.
Задача сделать блокировку отдельных страниц для совместного редактирования,
то есть чтобы страницу мог редактировать только один пользователь.
Я решил сделать так:
1. После того как пользователь заходит на страницу выполняется следующий запрос.
SELECT
users.user_id,
modules.module_id,
IF(user_edit_rights.user_id = users.user_id, 1, 0) AS user_can_edit_module,
my.module_id AS user_lock_module_id,
IF(other.user_id != users.user_id,1,0) AS another_user_lock_module
FROM users
INNER JOIN user_roles ON users.user_id = user_roles.user_id
INNER JOIN wedding ON wedding.id = user_roles.wedding_id
LEFT JOIN modules ON 1
LEFT JOIN user_edit_rights ON user_edit_rights.user_id = users.user_id AND user_edit_rights.wedding_id = wedding.id AND user_edit_rights.module_id = modules.module_id
LEFT JOIN user_module_locks AS my ON my.wedding_id = wedding.id AND my.user_id = users.user_id
LEFT JOIN user_module_locks AS other ON other.wedding_id = wedding.id AND other.module_id = modules.module_id
WHERE users.user_id = 3285
AND wedding.id = 72
AND modules.name = 'gifts'
Результат его выполнения выглядит примерно так:
users.user_id,
modules.module_id,
IF(user_edit_rights.user_id = users.user_id, 1, 0) AS user_can_edit_module,
my.module_id AS user_lock_module_id,
IF(other.user_id != users.user_id,1,0) AS another_user_lock_module
FROM users
INNER JOIN user_roles ON users.user_id = user_roles.user_id
INNER JOIN wedding ON wedding.id = user_roles.wedding_id
LEFT JOIN modules ON 1
LEFT JOIN user_edit_rights ON user_edit_rights.user_id = users.user_id AND user_edit_rights.wedding_id = wedding.id AND user_edit_rights.module_id = modules.module_id
LEFT JOIN user_module_locks AS my ON my.wedding_id = wedding.id AND my.user_id = users.user_id
LEFT JOIN user_module_locks AS other ON other.wedding_id = wedding.id AND other.module_id = modules.module_id
WHERE users.user_id = 3285
AND wedding.id = 72
AND modules.name = 'gifts'
| user_id | module_id | user_can_edit_module | user_lock_module_id | another_user_lock_module |
|---|---|---|---|---|
| 3285 | 10 | 0 | 2 | 0 |
После этого я могу либо добавить запись в таблицу user_module_locks
либо обновить либо удалить ненужные блокировки. То есть дальнейшая
логика приложения зависит именно от результата выполнения данного запроса.
Меня смущают 6 джоинов (в идеале 8-9) и постоянная необходимость выполнения этого запроса
и запроса на манипуляцыю (update, insert, delete) данных в таблице user_module_locks
данные в этой таблице будут постоянно изменятся при переходе пользователя от одной
страницы к другой. EXPLAIN данного запроса показывает что все SIMPLE и скорее всего
одновременного редактирования многими пользователями не будет (онлайн < 10 человек).
Больше всего меня интересует вопрос нормально ли это когда для получения полной
сущьности используется один запрос с большим кол-вом джоинов?
А также примерный алгоритм для организации редактирования данных несколькими
пользователями сразу.
А также нормально ли когда первичный ключ состоит из 3х и более полей?
Cоставлениe sql-запроса, пожалуйста?
Есть таблица, в которой два столбца, один со значениями, другой с их статусами (например: если статус 1, то значение относится к производимой продукции, если статус 2, то значение относится к реализованной продукции). Необходимо, что бы запрос брал значение из первого столбца на основе значения во втором столбце, а на выходе получалось два отдельных столбца с произведенной и реализованной продукцией. Хотелось бы сделать это одним запросом.
Допустим есть запрос:
SELECT value as value1, value as value2, status
необходимо, что бы в зависимости от поля status, данные из поля value попадали либо в value1 либо в value2.
Версионирование mysql
Вопрос, у нас на одной Базе данных используя одинаковые таблицы крутяться 4 проекта (Разные платформы, API CRM Сайт)
Так вот каждый проект разрабатывает своя группа програмистов и вносить в структуру БД разлинчые правки.
И в момент обновления из SVN нам надо получить какие изменения надо произвести на mysql сервере
Типа SVN для mysql
Посоветуйте в какую сторону смотреть, чего использовать
mysql добавление "-" в список символов
Возникла необходимость при полнотекстовом поиске искать слова с тире (по умолчанию символ "-" является логическим операторым и не считается символом).
Мануал по этому поводу говорит:
Modify a character set file: This requires no recompilation. The true_word_char() macro uses a “character type” table to distinguish letters and numbers from other characters.. You can edit the contents in one of the character set XML files to specify that '-' is a “letter.” Then use the given character set for your FULLTEXT indexes.
Вот только где находится этот character set file гугл не знает:( Кто то сталкивался с подобным?
Спасибо
MySQL и триггер на вставку
Вставляю в первую таблицу запись. На ней же висит триггер «после вставки», который добавляет id из первой таблицы во вторую. Как это реализовать?
Если вставляю в триггер запрос: INSERT INTO table2 VALUES (table2.id = LAST_INSERT_ID()); — добавляются «1».
Если запрос: INSERT INTO table2 VALUES (table2.id = new.id); — «0».
ruby-mysql2: MySQL server has gone away
Есть даемон написанный на ruby с использованием гема mysql2, занимается тем, что иногда получает сообщение из AMQP и пишет в базу.
При длительном простое MySQL закрывает соединение по таймауту и при попытке выполнить запрос вываливается exception 'MySQL server has gone away'. Гугл выдает решение для ActiveRecord, про mysql2 ничего. В методах класса Mysql2::Client ничего подходящего не нашел, опция :reconnect => true не помогает.
Как проверить соединение перед выполнением запроса и если оно закрыто, то поднять его снова?
Архитектура БД для фильтров аналог Яндекс Маркета?
Разрабатываем сейчас структуру характеристик товара, чтобы реализовать фильтры как на Яндекс Маркете.
Высоконагрузный проект, поэтому запросы на 5 листов А4 не пойдут.
market.yandex.ru/guru.xml?cmd=-rr=9,0,0,0-v…
Вот смотрите, если отмечаем любой пункт в фильтре, то вся фильтрация перестраивается и убираються те пункты, по которым подбор уже не пройдет
my.jetscreenshot.com/5783/20110219-smd2-59k...
И это все летает
Вопрос, может есть где статьи или человек, который сможет построить архитектуру таблиц с такими фильтрами?
Готов хорошо заплатить
Поиск mysql like
Задача сравнительно простая, но нагруженный проект.
Есть поле в таблице varchar(255). В таблице много полей и порядка 300 000 строк, но будет расти примерно до 1 000 000.
Сейчас поиск осуществляется так name LIKE '%$name%' OR name '%$translit%'
Поиск подтормаживает.
В связи с этим есть вариант
вынести полностью в отдельную таблицу search поля id, name и использовать все тот же LIKE '%$name%"'
Ускорит ли это поиск?
Ну и второй вариант морочиться с FULLTEXT, но никогда им не пользовался, есть ли смысл? Судя по докам он обходит меньше строк.
Морфология не важна.
Третий вариант видел в форумах. Разбивать на слова и составить таблицу word index и искать по нему.
В какую сторону копать?
Объединить несколько результатов MySQL запроса в один
Есть запрос с сервера А
$queryA = mysql_query("SELECT * FROM table");
и запрос с сервера B
$queryB = mysql_query("SELECT * FROM table");
Таблицы идентичны, во всем кроме данных.
Данные сервера А частично (в начале) равны данным с сервера B
Сортировка по дате.
Нужно собрать данные из двух таблиц в один mysql_fetch_array
Возможно ли это?
InnoDB или MyISAM с триггерами?
Проектируется база данных (MySQL) по большинству таблиц которой будет вестись поиск.
Было бы неплохо, если бы поиск был полнотекстовым.
Есть статья, как для InnoDB сделать полнотекстовой поиск (с дублированием данных в поисковой таблице).
Либо можно сделать таблицы на MyISAM, а отношения между таблицами организовать при помощи триггеров.
Какие есть плюсы/минусы у этих вариантов в плане скорости и отказоустойчивости?
Насколько оправданы гибридные варианты?
Я понимаю, что MyISAM не поддерживает механизм транзакций, есть ли ещё другие подводные камни?
Медленная сортировка по дате в Mysql
имеется медленный запрос (для 30к постов и 30к юзеров выполняется за 0.2с):
SELECT *
FROM `posts`
JOIN `users` ON ( `posts`.`user_id` = `users`.`id` )
GROUP BY `posts`.`id`
ORDER BY `posts`.`date` DESC
LIMIT 10
описывать стуктуру таблиц не буду полностью, т.к. полей много а на суть вопроса это не влияет, опишу основное — date типа datetime, ID типа int
праймери индексы на posts.id и users.id + индекс на posts.user_id
при таком раскладе запрос выполняется за 0.2с
если поставить индекс на date запрос выполняется все равно за 0.2с
если поставить сортировку по posts.id (что в принципе эквивалентно date), запрос выполняется за 0.001с
если убрать JOIN users запрос выполняется за 0.001с
explain:
без индекса на posts.date, время 0.2с
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | posts | index | user_id | PRIMARY | 4 | NULL | 1000 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | users | eq_ref | PRIMARY | PRIMARY | 3 | db_site.posts.user_id | 1 | Using where |
с индексом на posts.date, время 0.2с
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | posts | index | user_id | date | 8 | NULL | 1000 | Using where; Using temporary |
| 1 | SIMPLE | users | eq_ref | PRIMARY | PRIMARY | 3 | db_site.posts.user_id | 1 | Using where |
без сортировки по posts.date, время 0.001с
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | posts | index | user_id | PRIMARY | 4 | NULL | 1000 | Using where |
| 1 | SIMPLE | users | eq_ref | PRIMARY | PRIMARY | 3 | db_site.posts.user_id | 1 | Using where |
а теперь внимание, вопрос — как сделать сортировку по дате быстрой? и что я делаю не так…
Простой, но медленный запрос в Mysql, что соптимизить
Запрос примитивный — вытащить посты по указанному тегу
SELECT SQL_NO_CACHE posts.id, posts.text, posts.anno, posts.date
FROM `posts`
INNER JOIN `posts_xref_tags` ON posts_xref_tags.post_id = posts.id
WHERE posts_xref_tags.tag_id = 1
ORDER BY posts.date DESC
LIMIT 0,10
в posts primary на id, индекс на date
в posts_xref_tags составной primary на tag_id + post_id и индекс на tag_id
Постов в базе 30000, перекрестных связей 40000… постов имеющих связь с tag_id = 1 4,281
запрос выполняется за 0.2с
explain:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | posts_xref_tags | ref | PRIMARY,tag_id | tag_id | 4 | const | 4244 | Using temporary; Using filesort |
| 1 | SIMPLE | posts | eq_ref | PRIMARY | PRIMARY | 4 | db_site. posts_xref_tags. post_id | 1 |
UPD: Нашел решение!!!
SELECT SQL_NO_CACHE posts.id, posts.text, posts.anno, posts.create_date
FROM `az_posts`
WHERE id
IN (
SELECT `post_id`
FROM `posts_xref_tags`
WHERE tag_id =1
)
ORDER BY posts.create_date DESC
LIMIT 0, 10
выполняется за 0.002с
всем спасибо!
Подсчет потомков узла в MySQL?
Добрый день.
Имеется таблица:
CREATE TABLE sections (<br/>
id_sections INT(11) NOT NULL AUTO_INCREMENT,<br/>
name VARCHAR(255) DEFAULT NULL,<br/>
parent INT(11) UNSIGNED NOT NULL,<br/>
PRIMARY KEY (id_sections)<br/>
)<br/>
В которой хранится двухуровневое дерево в поле parent храниться id_sections родителя.
Требуется создать запрос для вывода всех корневых каталогов (parent = 0) с количеством вложенных каталогов.
Заранее благодарен.
CREATE TABLE sections (<br/>
id_sections INT(11) NOT NULL AUTO_INCREMENT,<br/>
name VARCHAR(255) DEFAULT NULL,<br/>
parent INT(11) UNSIGNED NOT NULL,<br/>
PRIMARY KEY (id_sections)<br/>
)<br/>
Debian-сервер умирает, когда MySQL строит индекс?
Есть сервер EQ-4 с Debian Squeeze 2.6.32-5-amd64. Там Software-RAID 1.
На сервере живет MySQL 5.1.49, в которой есть таблица MyISAM на 4 ГБ с индексами на 500 МБ. Индексы убираются в память и выборки из таблицы происходят достаточно быстро (кстати, какими-то настройками удалось добиться ускорения выборки в 10 раз, но я забыл, какими именно и поменял конфиг).
Проблемы начинаются, когда идет добавление данных в таблицу или на чистой таблице строится индекс (я часто удаляю данные и загружаю полностью новые). Disk utilization for /dev/sda — 100%, for /dev/sdb — 50%. Все дисковые операции начинают жутко тормозить. Доступ к другим таблицам (со смешными размерами) происходит очень медленно. Apache и nginx массово создают процессы и потоки. Мониторинг не мониторит (вылетает из-за превышения времени ожидания ответов от каких-то утилит). LA взлетает до 30..50 (в норме он там около 0.5).
Я не возражаю против того, что базе нужен диск. Но что можно сделать, чтобы при активном юзании диска одним приложением, другие приложения не умирали так быстро? Можно ли как-то указывать приоритеты?
FreeBSD не предлагать :-)
Я бы рад, но не справлюсь с установкой и настройкой.
UPDATE:
По результатам небольшого тестирования перешел на другой планировщик ввода-вывода. Был cfq (!!!), стал anticipatory. Сейчас тестирую в работе.
UPDATE-2:
Тестировал разные планировщики в реальных ситуациях. Выбор планировщика и правильная настройка их параметров очень сильно влияет на производительность и отзывчивость сервера. Сейчас остановился на deadline, но однозначную рекомендацию тут давать нельзя: выбор зависит от приоритетных задач вашего сервера. Постараюсь разобраться в вопросе и написать более подробно.
Экспорт MySQL с пользователями?
Встала задача перехать на другой VDS. На обоих машинах стоит ISPManager, но он отказывается делать импорт пользователя — постоянно ошибки. Решил делать в ручную, но очень не хочется создавать заново пользователей MySQL, потом их прописывать в скриптах и делать прочие сопутствующие вещи.
Можно ли как то сделать экспорт всех баз вместе с пользователями, сохранив их пароли?
Организация системы ревизий в базе данных?
Дано:
- Приложение, написанное на PHP с MySQL (Yii Framework);
- Несколько типов контента, например setting и node. Хранится в разных таблицах со своим набором полей;
- Около 10к пользователей приложения с очень частым обновлением одного из типов контента, допустим node. Во время редактирования node может обновляться до нескольких раз в секунду (с созданием новых ревизий). В тоже время, некоторые node могут не обновляться месяцами, а некоторые каждый день по нескольку раз.
Необходимо сделать что-то вроде системы контроля версий, чтобы синхронизировать несколько клиентских приложений с сервером. Хороший пример: расширение для браузеров Xmarks.
Вопрос заключается в том, как хранить ревизии (и изменения в них) в базе MySQL?
Мне на ум пришло такое решение:
Одна таблица, которая хранит все изменения контента. Выглядит это примерно так:
rev action type id args
1 insert node 1421 { text: 'custom node', created: 1236124121 }
2 update node 1421 { text: 'asd', modified: 1237123134 }
3 update node 1421 { title: 'example node', modified: 1238123814 }
3 insert node 1422 { field: new_value }
3 update setting 12 { email: 'Oo@mail.ru' }
4 update node 1422 { field: new_new_value }
4 update setting 12 { email: 'mail@mail.ru' }
5 delete node 1421 {}
- Rev – номер ревизии пользователя. В рамках одной ревизии может быть несколько записей.
- Action – тип изменений. insert|update|delete.
- Type – тип контента. Например, node или setting.
- Id – идентификатор контента.
- Args – объект json с логом изменений.
Не знаю, насколько правильно хранить ревизии таким образом, в одной таблице. Допустим, у каждого юзера будет по 5к ревизий – это уже 50 млн. записей! Как с этим будет справляться MySQL, если учесть, что идет постоянная запись в таблицу?
Как можно решить данную проблему наиболее рационально? Готов рассмотреть варианты с использованием других БД, в т.ч. NoSQL.
Большое спасибо за помощь.
UPD:
Есть вариант отказаться от возможности восстановить старые ревизии. Таким образом, можно исключить update записи и хранить только последнюю ревизию в таблице контента.
Тогда таблица сократиться в 10 раз, и в ней будет около 5 млн. записей. Насколько это упрощает задачу? Как поведет себя MySQL в таком случае?
Mysql-ферма
Если говорить про сферический mysql в вакууме, то какой вариант абстрактно лучше: три четырехъядерных Core2Quad сервера по 6 Гб памяти каждый (с репликацией master-slave) или один восьмиядерный Xeon c 12 Гб памяти? Или например так: три по 8 Гб или один 24 Гб? Приоритет системы в основном на чтение.
Импорт массива данных в таблицу mySQL?
Доброе время суток.
Есть задача отпарсить TXT и обновить данные в таблице используя результат парсинга.
Первая подзадача решается без проблем, а вот вторая задача решается, но решение не совсем корректное на мой взгляд.
TXT:
001-03-0027,4000.50,5<br/>
001-03-0031,8000.50,6<br/>
001-03-0028,12000.50,7<br/>
001-03-0033,16000.50,8<br/>
...<br/>
Таблица:
CREATE TABLE properties(<br/>
...<br/>
id_1c VARCHAR(255) DEFAULT NULL,<br/>
price FLOAT DEFAULT 0,<br/>
count INT(11) DEFAULT 0,<br/>
)<br/>
Обрабатывая файл построчно я получаю 3 переменные $array['id_1c'], $array['price'], $array['count']. Которые запихиваю в запрос:
<br/>
'UPDATE properties SET price='.$array['price'].', count='.$array['count'].' WHERE id_1c = '.$array['id_1c'];<br/>
В итоге получаю количество запросов прямо пропорциональное количеству строк в файле, а их там 5000 шт.
Возможно ли как то оптимизировать данный процесс?
С учетом того, что требуется проводить мониторинг успешности обновления данных:
ID 001-03-0027: обновлен успешно<br/>
ID 001-03-0031: не найден в базе<br/>
ID 001-03-002: не найден в базе<br/>
ID 001-03-0033: обновлен успешно<br/>
Спасибо.
001-03-0027,4000.50,5<br/>
001-03-0031,8000.50,6<br/>
001-03-0028,12000.50,7<br/>
001-03-0033,16000.50,8<br/>
...<br/>CREATE TABLE properties(<br/>
...<br/>
id_1c VARCHAR(255) DEFAULT NULL,<br/>
price FLOAT DEFAULT 0,<br/>
count INT(11) DEFAULT 0,<br/>
)<br/><br/>
'UPDATE properties SET price='.$array['price'].', count='.$array['count'].' WHERE id_1c = '.$array['id_1c'];<br/>ID 001-03-0027: обновлен успешно<br/>
ID 001-03-0031: не найден в базе<br/>
ID 001-03-002: не найден в базе<br/>
ID 001-03-0033: обновлен успешно<br/>