Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / BD vs File / 18 сообщений из 18, страница 1 из 1
02.07.2015, 11:21:18
    #38997588
Poxer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
Добрый день!
Для работы программы необходимо сразу после её запуска получить в оперативке массив с котировками. Размер массива обычно не превышает 5 миллионов элементов (файл 350Мб) и в текущей версии он считывается из одного из нескольких десятков файлов в зависимости от того какой нужен программе.
Строки в файле вида:
1199875560,233330.0,233340.0,233190.0,233205.0,1.0
1199875620,233205.0,233365.0,233175.0,233365.0,1.0
Вся процедура чтения сейчас занимает не более 5 секунд.
Пробовал хранить данные в MySQL таблице, но обычным селектом у меня 5 миллионов записей читаются в Java программу через ODBC в разы дольше по времени. Хотел бы добиться приблизительно такой же скорости как с файлами.

Что-то не верно делаю или считывание 5 миллионов строк селектом без выборок быстрее не получится?
...
Рейтинг: 0 / 0
02.07.2015, 11:24:55
    #38997592
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
PoxerПробовал хранить данные в MySQL таблицекак именно? в виде 5млн записей? насколько я понимаю, делать с ними вы всё равно ничего не будете, так может, попробуете хранить сразу файлы целиком? в блобах.
...
Рейтинг: 0 / 0
02.07.2015, 11:31:57
    #38997595
Poxer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
tanglirPoxerПробовал хранить данные в MySQL таблицекак именно? в виде 5млн записей? насколько я понимаю, делать с ними вы всё равно ничего не будете, так может, попробуете хранить сразу файлы целиком? в блобах.

Да, хранил 5млн записей в одной таблице данные для которой брал из файла.
Делать с существующими строками ничего не планирую, но хочу иметь возможность дописывать новые строки. Т.е. раз в минуту в конец таблицы будет добавляться 1 строка и на момент запроса select нужно получить 5млн записей включая последние строки.
...
Рейтинг: 0 / 0
02.07.2015, 11:36:16
    #38997609
Poxer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
Правда таблица в базе данных у меня разделена на столбцы. Чтоб в Java программе не парсить строку а сразу иметь массивы из 5млн значений под каждый столбец.
Столбец Тип Null По умолчанию Комментарии
ID int(11) Нет
Timestamp int(11) Нет
Open double Нет
High double Нет
Low double Нет
Close double Нет
Volume double Нет
...
Рейтинг: 0 / 0
02.07.2015, 11:42:08
    #38997622
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
Poxerраз в минуту в конец таблицы будет добавляться 1 строка и на момент запроса select нужно получить 5млн записей включая последние строки.
Вот тут и возникает вопрос - а за каким хреном они нужны? ну не юзеру же показывать...
Они что, как-то используются при построении запроса на пополнение? а если так - не проще ли убрать эту логику на SQL-сервер и не гонять туда-сюда тонны в общем нахрен ненужных данных?
...
Рейтинг: 0 / 0
02.07.2015, 11:52:50
    #38997642
Poxer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
AkinaPoxerраз в минуту в конец таблицы будет добавляться 1 строка и на момент запроса select нужно получить 5млн записей включая последние строки.
Вот тут и возникает вопрос - а за каким хреном они нужны? ну не юзеру же показывать...
Они что, как-то используются при построении запроса на пополнение? а если так - не проще ли убрать эту логику на SQL-сервер и не гонять туда-сюда тонны в общем нахрен ненужных данных?

Для моей задачи нужны старые данные (5млн строк) + новые которые каждую минуту по 1 строке. Это одна из причин почему для меня база данных удобнее чем файлы, что её легко пополнять новыми строками. Если бы нужны были только старые данные, то очевидно вариант с файлами без базы данных который есть сейчас был бы проще...

Вся проблема в скорости доступа... чтение 5 млн строк из базы запросом SELECT * FROM `tab` оказывается значительно проигрывает чтению 5 млн строк из файла и как это победить не понятно.
...
Рейтинг: 0 / 0
02.07.2015, 12:29:11
    #38997720
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
PoxerЭто одна из причин почему для меня база данных удобнее чем файлы, что её легко пополнять новыми строками.Файл пополнять еще проще. Просто дописывать данные в конец. Это даже на shell-скриптах легко делается.

Если вам всегда нужно выбирать весь массив данных без какой-либо фильтрации, сортировки и т.п., то смысла использовать СУБД я не вижу.
...
Рейтинг: 0 / 0
02.07.2015, 12:46:20
    #38997751
Poxer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
У меня эта программа может быть запущена на разных компьютерах и получается на каждый нужно таскать за собой кучу файлов с миллионами строк и добавлять каждую минуту не на 1 компьютере а на нескольких и несколько файлов.
По этому централизованная база данных к которой имели бы доступ все компьютеры выглядит значительно проще, добавление 1 строки в минуту в её таблицы тоже проще. В общем смысл однозначно есть и это сильно бы упростило жизнь... Но скорость чтения 5 миллионов строк с БД не устраивает. По этому и спрашиваю может кто-то решал подобную задачу.

Да, можно после первого прочтения сохранять данные в файл на локальном компьютере... затем при повторном запросе к данным читать из файла старые + дочитывать все новые данные из БД. Технически это реализуемо, но т.к. таблиц по 5млн записей будет несколько десятков, то очень не удобное решение. И первый запуск программы будет долгим т.к. придётся считывать все 5млн из БД. Не хочется так делать.
...
Рейтинг: 0 / 0
02.07.2015, 13:30:25
    #38997842
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
PoxerУ меня эта программа может быть запущена на разных компьютерах и получается на каждый нужно таскать за собой кучу файловФайловый сервер (SMB,NFS,FTP,HTTP и т.д.) выручит. Да и rsync никто не отменял.
...
Рейтинг: 0 / 0
02.07.2015, 13:32:15
    #38997851
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
СУБД всегда будет ощутимо медленнее, чем файлы, когда нужно прочитать все.

Но если очень хочется, то можно попробовать использовать движок MEMORY. Или расположить всю базу на диске в RAM. Впрочем, файлы на диске в RAM будут еще быстрее.
...
Рейтинг: 0 / 0
02.07.2015, 13:35:58
    #38997858
Poxer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
Спасибо за помощь. Буду выкручиваться файлами пока. Как будет время протестирую другие базы данных на скорость последовательного чтения.
...
Рейтинг: 0 / 0
02.07.2015, 13:38:38
    #38997865
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
PoxerКак будет время протестирую другие базы данных на скорость последовательного чтения.Я бы не ждал кардинального улучшения. Накладные расходы в любой СУБД общего назначения будут велики.
...
Рейтинг: 0 / 0
02.07.2015, 14:04:31
    #38997906
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
PoxerДля моей задачи нужны старые данные (5млн строк) + новые которые каждую минуту по 1 строке. Это одна из причин почему для меня база данных удобнее чем файлы, что её легко пополнять новыми строками. Если бы нужны были только старые данные, то очевидно вариант с файлами без базы данных который есть сейчас был бы проще...

Вся проблема в скорости доступа... чтение 5 млн строк из базы запросом SELECT * FROM `tab` оказывается значительно проигрывает чтению 5 млн строк из файла и как это победить не понятно.
Повторю ещё раз - почему ты стремишься реализовать логику на клиенте? что мешает вынести её на сервер? вызываешь процедуру, передаёшь ей параметры, а она их пережёвывает с использованием тех самых 5 миллионов записей (но в этом случае - локальных, в таблице под боком, трафик гонять никуда не нужно, да и индексы работают) и добавляет ещё одну запись. По-моему, так гораздо разумнее. А заодно отпадут проблемы с обновлением логики, буде она потребуется.
...
Рейтинг: 0 / 0
02.07.2015, 14:20:41
    #38997942
Poxer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
Akina,
Опять же специфика моей задачи. У меня сервер БД не справится сам с вычислением потому, что расчеты происходят не на одном а на десятке компьютеров которые используют лишь общие данные. Твой вариант идеален для задач где много данных и мало расчетов, там действительно можно вынести на сервер БД всё и клиенту возвращать только результат. Но у меня много данных и много расчетов. По этому без распределения на N компов не обойтись.
miksoft,
Да. Я уже понял, что файлы при последовательном чтении будут быстрее в любом случаи и видимо на порядок.
1) Отсутствие задержки на передачу данных по сети
2) Отсутствие задержки на логику СУБД
...
Рейтинг: 0 / 0
02.07.2015, 16:30:50
    #38998089
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
PoxerОпять же специфика моей задачи. У меня сервер БД не справится сам с вычислением потому, что расчеты происходят не на одном а на десятке компьютеров которые используют лишь общие данные. Твой вариант идеален для задач где много данных и мало расчетов, там действительно можно вынести на сервер БД всё и клиенту возвращать только результат. Но у меня много данных и много расчетов. По этому без распределения на N компов не обойтись.Почти не верю. Что это действительно котировки, и какие-то новые данные рождаются из обработки старых - верю. Но вот в то, что каждый из этих N компьютеров будет считать что-то особое, по своему уникальному алгоритму - верю слабо. А что потом эти по-разному посчитанные результаты будут сваливаться всё в ту же таблицу, и потом примут участие в расчётах на всех компьютерах - не верю вообще.

Впрочем, дело твоё. Ты выбрал себе какой-то путь - ну удачи. А если он, возможно, неоптимален - это твои опять же риски.
...
Рейтинг: 0 / 0
02.07.2015, 16:44:54
    #38998115
Poxer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
AkinaPoxerОпять же специфика моей задачи. У меня сервер БД не справится сам с вычислением потому, что расчеты происходят не на одном а на десятке компьютеров которые используют лишь общие данные. Твой вариант идеален для задач где много данных и мало расчетов, там действительно можно вынести на сервер БД всё и клиенту возвращать только результат. Но у меня много данных и много расчетов. По этому без распределения на N компов не обойтись.Почти не верю. Что это действительно котировки, и какие-то новые данные рождаются из обработки старых - верю. Но вот в то, что каждый из этих N компьютеров будет считать что-то особое, по своему уникальному алгоритму - верю слабо. А что потом эти по-разному посчитанные результаты будут сваливаться всё в ту же таблицу, и потом примут участие в расчётах на всех компьютерах - не верю вообще.

Впрочем, дело твоё. Ты выбрал себе какой-то путь - ну удачи. А если он, возможно, неоптимален - это твои опять же риски.

Да, каждый из N компьютеров будет считать по особому алгоритму нагружая процессор на 100% при этом.
Результаты будут попадать не в ту же а в другую таблицу. А в ту таблицу будут добавляться только новые котировки каждую минуту.
...
Рейтинг: 0 / 0
02.07.2015, 17:03:23
    #38998132
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
может посмотреть в сторону nosql
...
Рейтинг: 0 / 0
02.07.2015, 17:10:44
    #38998146
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BD vs File
PoxerРезультаты будут попадать не в ту же а в другую таблицу.Ааа... вон оно чё, Михалыч... Тады ладно.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / BD vs File / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]