В каком формате хранить данные?

12
Mik Foxi
На сайте с 02.03.2011
Offline
1216
2626

Структура базы: около 50 столбцов и (в ближайшем будущем) около 3-5 млн строк.

К базе идет очень много чтений строк по уникальному id строки и немного меньше, но тоже часто - добавление и обновление строк. скрипт работающий с базой написан на php

В каком формате все это хранить?

1) Пробовал mysql (одна база), нагрузка на сервер ацкая, как не оптимизировал, да и скорость работы просто никакая, тормоза жуткие.

2) Сейчас работает на sqlite3 (множество баз по 10к строк) + кеширование запросов в memcached, костыльно както, да и косяки с постоянной блокировкой базы, когда один пишет, другой прочитать не может.

Сейчас начал играться с mongodb, что скажете?

Или может есть более интересный и удобный вариант?

Антибот, антиспам, веб фаервол, защита от накрутки поведенческих: https://antibot.cloud/ (8 лет на защите сайтов). Форум на замену серчу: https://foxi.biz/
DV
На сайте с 01.05.2010
Offline
644
#1

Узкое место — диск? Если так, то изврат с tmpfs здорово повысит скорость.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
Mik Foxi
На сайте с 02.03.2011
Offline
1216
#2
DenisVS:
Узкое место — диск? Если так, то изврат с tmpfs здорово повысит скорость.

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

Нужно выбрать оптимальный тип базы. монгодб вот сама вроде как в памяти кешируется, без дополнений типа tmpfs, memcached и т.п., но что-то у меня сомнения в надежности манги, если вдруг сервер ребутнется или еще какой нештатный глюк...

DV
На сайте с 01.05.2010
Offline
644
#3

Просто я долго мучился в своё время, оптимизировал запросы, и всё равно скрипт работал непозволительно долго, несколько суток на задачу, при этом не мог спокойно смотреть на постоянно горящий индикатор работы диска и слушать его хруст. Закинул всё в ОЗУ, и за несколько часов скрипт отработал.

Mik Foxi
На сайте с 02.03.2011
Offline
1216
#4

DenisVS, да в общемто я бы не сказал что диск становился узким местом (iotop во всяком случае не показывал ничего критичного, запас есть), но вот сами базы тупят изза конкурентных запросов.

IL
На сайте с 20.04.2007
Offline
435
#5
foxi:
1) Пробовал mysql (одна база), нагрузка на сервер ацкая, как не оптимизировал, да и скорость работы просто никакая, тормоза жуткие.

InnoDB, надеюсь? Что с кэшированием средствами базы.., с памятью под кэш, под временные таблицы? Explain-ы Индексы и прочее..

лог медленных запросов что говорит?

foxi:
около 50 столбцов и (в ближайшем будущем) около 3-5 млн строк.

Есть текстовые столбцы? Все ли столбцы нужны постоянно? Я к тому, что иногда имеет часть данных (длинных строк.. всех TEXT-полей) вынести в другую таблицу (связь по PK/id)

Иногда имеет смысл вместо varchar использовать char - фиксированная длина строки -> расчёт позиции курсора.

Не использовать функции, препятствующие кэшированию (CURRENT_TIMESTAMP() и тд.. http://dev.mysql.com/doc/refman/5.0/en/query-cache-operation.html)

К базе идет очень много чтений строк по уникальному id

Можно "разгрузить" mysql, в мемкэш складывать.. если, конечно, смысл есть..

foxi:
монгодб вот сама вроде как в памяти кешируется, без дополнений типа tmpfs, memcached и т.п., но что-то у меня сомнения в надежности манги, если вдруг сервер ребутнется или еще какой нештатный глюк...

mysql тоже в память лезет, если настройки позволяют.. =)

По поводу надёжности mongodb - в любом случае бэкапы не помешают.. но, если есть возможность - использовать репликацию.

---------- Post added 05-03-2013 at 21:43 ----------

Ещё.. для MySQL можно partitions посмотреть.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
DV
На сайте с 01.05.2010
Offline
644
#6

Да, а ведь кэш InnoDB нужно долго "греть", чтобы от него был эффект, не забывайте при тестах про это.

doctorpc
На сайте с 12.07.2009
Offline
112
#7

Имхо для Mysql - это детская база. Есть опыт работы и со значительно большими таблицами.

Думаю проблема в логике/запросах php скрипта.

Покажите

show create table 'имя таблицы';
если база на mysql еще сохранилась.

И какие параметры сервера на который "нагрузка ацкая"?

TF-Studio
На сайте с 17.08.2010
Offline
334
#8

- postgresql

- попробовать разнести базу

?

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
iqmaker
На сайте с 17.04.2012
Offline
342
#9

Чтобы ответить, слишком много неизвестных, таких как:

Что значит медленно, сколько сек, мсек, мин на запрос?

Сколько запросов в единицу времени?

Размер базы данных в мб, гб?

Мощность сервера ( озу, процессор )

Ну и неплохо бы увидеть show create table TABLENAME для таблицы из которой дергаются данные.

И сам запрос, который формируется для mysql.

Mik Foxi
На сайте с 02.03.2011
Offline
1216
#10
doctorpc:
Имхо для Mysql - это детская база. Есть опыт работы и со значительно большими таблицами.
Думаю проблема в логике/запросах php скрипта.
Покажите если база на mysql еще сохранилась.
И какие параметры сервера на который "нагрузка ацкая"?

уже не сохранилась, на случай моей криворукости и не очень больших знаний mysql - помогал настраивать человек который в этом получше разбирается. в итоге mysql все равно не смогла приблизиться к sqlite3+memcached

TF-Studio:
- postgresql
- попробовать разнести базу
?

postgresql никогда не тестил, нужно попробовать.

база сейчас разнесена на мелкие базы (sqlite), по скорости устраивает, нагрузка на проц/оперативку не большая, но нередко случается что прочитать не получается из базы, т.к. туда ктото пишет, в итоге костыли с повторными запросами на чтение , да и не удобно искать сразу по куче баз.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий