|
|
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
Добрый день! Для работы программы необходимо сразу после её запуска получить в оперативке массив с котировками. Размер массива обычно не превышает 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 миллионов строк селектом без выборок быстрее не получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 11:21:18 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
PoxerПробовал хранить данные в MySQL таблицекак именно? в виде 5млн записей? насколько я понимаю, делать с ними вы всё равно ничего не будете, так может, попробуете хранить сразу файлы целиком? в блобах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 11:24:55 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
tanglirPoxerПробовал хранить данные в MySQL таблицекак именно? в виде 5млн записей? насколько я понимаю, делать с ними вы всё равно ничего не будете, так может, попробуете хранить сразу файлы целиком? в блобах. Да, хранил 5млн записей в одной таблице данные для которой брал из файла. Делать с существующими строками ничего не планирую, но хочу иметь возможность дописывать новые строки. Т.е. раз в минуту в конец таблицы будет добавляться 1 строка и на момент запроса select нужно получить 5млн записей включая последние строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 11:31:57 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
Правда таблица в базе данных у меня разделена на столбцы. Чтоб в Java программе не парсить строку а сразу иметь массивы из 5млн значений под каждый столбец. Столбец Тип Null По умолчанию Комментарии ID int(11) Нет Timestamp int(11) Нет Open double Нет High double Нет Low double Нет Close double Нет Volume double Нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 11:36:16 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
Poxerраз в минуту в конец таблицы будет добавляться 1 строка и на момент запроса select нужно получить 5млн записей включая последние строки. Вот тут и возникает вопрос - а за каким хреном они нужны? ну не юзеру же показывать... Они что, как-то используются при построении запроса на пополнение? а если так - не проще ли убрать эту логику на SQL-сервер и не гонять туда-сюда тонны в общем нахрен ненужных данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 11:42:08 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
AkinaPoxerраз в минуту в конец таблицы будет добавляться 1 строка и на момент запроса select нужно получить 5млн записей включая последние строки. Вот тут и возникает вопрос - а за каким хреном они нужны? ну не юзеру же показывать... Они что, как-то используются при построении запроса на пополнение? а если так - не проще ли убрать эту логику на SQL-сервер и не гонять туда-сюда тонны в общем нахрен ненужных данных? Для моей задачи нужны старые данные (5млн строк) + новые которые каждую минуту по 1 строке. Это одна из причин почему для меня база данных удобнее чем файлы, что её легко пополнять новыми строками. Если бы нужны были только старые данные, то очевидно вариант с файлами без базы данных который есть сейчас был бы проще... Вся проблема в скорости доступа... чтение 5 млн строк из базы запросом SELECT * FROM `tab` оказывается значительно проигрывает чтению 5 млн строк из файла и как это победить не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 11:52:50 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
PoxerЭто одна из причин почему для меня база данных удобнее чем файлы, что её легко пополнять новыми строками.Файл пополнять еще проще. Просто дописывать данные в конец. Это даже на shell-скриптах легко делается. Если вам всегда нужно выбирать весь массив данных без какой-либо фильтрации, сортировки и т.п., то смысла использовать СУБД я не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 12:29:11 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
У меня эта программа может быть запущена на разных компьютерах и получается на каждый нужно таскать за собой кучу файлов с миллионами строк и добавлять каждую минуту не на 1 компьютере а на нескольких и несколько файлов. По этому централизованная база данных к которой имели бы доступ все компьютеры выглядит значительно проще, добавление 1 строки в минуту в её таблицы тоже проще. В общем смысл однозначно есть и это сильно бы упростило жизнь... Но скорость чтения 5 миллионов строк с БД не устраивает. По этому и спрашиваю может кто-то решал подобную задачу. Да, можно после первого прочтения сохранять данные в файл на локальном компьютере... затем при повторном запросе к данным читать из файла старые + дочитывать все новые данные из БД. Технически это реализуемо, но т.к. таблиц по 5млн записей будет несколько десятков, то очень не удобное решение. И первый запуск программы будет долгим т.к. придётся считывать все 5млн из БД. Не хочется так делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 12:46:20 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
PoxerУ меня эта программа может быть запущена на разных компьютерах и получается на каждый нужно таскать за собой кучу файловФайловый сервер (SMB,NFS,FTP,HTTP и т.д.) выручит. Да и rsync никто не отменял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 13:30:25 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
СУБД всегда будет ощутимо медленнее, чем файлы, когда нужно прочитать все. Но если очень хочется, то можно попробовать использовать движок MEMORY. Или расположить всю базу на диске в RAM. Впрочем, файлы на диске в RAM будут еще быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 13:32:15 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь. Буду выкручиваться файлами пока. Как будет время протестирую другие базы данных на скорость последовательного чтения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 13:35:58 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
PoxerКак будет время протестирую другие базы данных на скорость последовательного чтения.Я бы не ждал кардинального улучшения. Накладные расходы в любой СУБД общего назначения будут велики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 13:38:38 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
PoxerДля моей задачи нужны старые данные (5млн строк) + новые которые каждую минуту по 1 строке. Это одна из причин почему для меня база данных удобнее чем файлы, что её легко пополнять новыми строками. Если бы нужны были только старые данные, то очевидно вариант с файлами без базы данных который есть сейчас был бы проще... Вся проблема в скорости доступа... чтение 5 млн строк из базы запросом SELECT * FROM `tab` оказывается значительно проигрывает чтению 5 млн строк из файла и как это победить не понятно. Повторю ещё раз - почему ты стремишься реализовать логику на клиенте? что мешает вынести её на сервер? вызываешь процедуру, передаёшь ей параметры, а она их пережёвывает с использованием тех самых 5 миллионов записей (но в этом случае - локальных, в таблице под боком, трафик гонять никуда не нужно, да и индексы работают) и добавляет ещё одну запись. По-моему, так гораздо разумнее. А заодно отпадут проблемы с обновлением логики, буде она потребуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 14:04:31 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
Akina, Опять же специфика моей задачи. У меня сервер БД не справится сам с вычислением потому, что расчеты происходят не на одном а на десятке компьютеров которые используют лишь общие данные. Твой вариант идеален для задач где много данных и мало расчетов, там действительно можно вынести на сервер БД всё и клиенту возвращать только результат. Но у меня много данных и много расчетов. По этому без распределения на N компов не обойтись. miksoft, Да. Я уже понял, что файлы при последовательном чтении будут быстрее в любом случаи и видимо на порядок. 1) Отсутствие задержки на передачу данных по сети 2) Отсутствие задержки на логику СУБД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 14:20:41 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
PoxerОпять же специфика моей задачи. У меня сервер БД не справится сам с вычислением потому, что расчеты происходят не на одном а на десятке компьютеров которые используют лишь общие данные. Твой вариант идеален для задач где много данных и мало расчетов, там действительно можно вынести на сервер БД всё и клиенту возвращать только результат. Но у меня много данных и много расчетов. По этому без распределения на N компов не обойтись.Почти не верю. Что это действительно котировки, и какие-то новые данные рождаются из обработки старых - верю. Но вот в то, что каждый из этих N компьютеров будет считать что-то особое, по своему уникальному алгоритму - верю слабо. А что потом эти по-разному посчитанные результаты будут сваливаться всё в ту же таблицу, и потом примут участие в расчётах на всех компьютерах - не верю вообще. Впрочем, дело твоё. Ты выбрал себе какой-то путь - ну удачи. А если он, возможно, неоптимален - это твои опять же риски. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 16:30:50 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
AkinaPoxerОпять же специфика моей задачи. У меня сервер БД не справится сам с вычислением потому, что расчеты происходят не на одном а на десятке компьютеров которые используют лишь общие данные. Твой вариант идеален для задач где много данных и мало расчетов, там действительно можно вынести на сервер БД всё и клиенту возвращать только результат. Но у меня много данных и много расчетов. По этому без распределения на N компов не обойтись.Почти не верю. Что это действительно котировки, и какие-то новые данные рождаются из обработки старых - верю. Но вот в то, что каждый из этих N компьютеров будет считать что-то особое, по своему уникальному алгоритму - верю слабо. А что потом эти по-разному посчитанные результаты будут сваливаться всё в ту же таблицу, и потом примут участие в расчётах на всех компьютерах - не верю вообще. Впрочем, дело твоё. Ты выбрал себе какой-то путь - ну удачи. А если он, возможно, неоптимален - это твои опять же риски. Да, каждый из N компьютеров будет считать по особому алгоритму нагружая процессор на 100% при этом. Результаты будут попадать не в ту же а в другую таблицу. А в ту таблицу будут добавляться только новые котировки каждую минуту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 16:44:54 |
|
||
|
BD vs File
|
|||
|---|---|---|---|
|
#18+
может посмотреть в сторону nosql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 17:03:23 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38998146&tid=1832991]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 330ms |

| 0 / 0 |
