2013-10-14 2 views
0

Я создаю платформу для сбора и анализа файлов «csv», которая содержит 5000 строк в среднем и 40 столбцов; файлы могут быть загружены любым зарегистрированным пользователем, поэтому теоретически не должно быть ограничений на количество файлов, которые могут быть загружены и сохранены (при условии, что у меня не более 20 загрузок в день). Этот файл анализируется с помощью специально созданного парсера PHP, который является очень эффективным, но здесь возникает проблема: хранение. В частности, я хотел бы сохранить эти данные в MySQL db для дальнейшего использования: как мне организовать мою базу данных? Должен ли я создавать таблицу, содержащую строку для каждого файла, в каждой ячейке, содержащей содержимое каждого столбца исходного файла? Или я должен вставить одну строку для каждой строки в файле? Первый из них кажется мне лучше из-за огромного количества строк, созданных вторым решением, но также менее эффективного, потому что в любое время, когда мне нужно извлечь какие-либо данные в базе данных, мне придется снова проанализировать весь блок, а затем извлечь данные, которые мне нужныPHP/MYSQL Хранить большие массивы данных в базе данных

Учитывая, что я не могу хранить данные в массивах PHP из-за нехватки памяти, если одновременно подключено слишком много пользователей, что было бы лучшим решением в этом случае?

+0

У всех файлов CSV одинаковые столбцы? –

+0

Число строк в базе данных означает почти ничего. Для почти ЛЮБЫХ воображаемых решений, сохраняющих данные, строка на строку CSV будет намного лучше, чем хранение всего CSV в одной строке. – Fluffeh

+0

Да, в CSV есть все те же столбцы – Socket2104

ответ

2

Поскольку все файлы имеют одинаковые столбцы, вы должны хранить их в одной таблице и добавлять еще один столбец (возможно, ссылаясь на вторую таблицу с одной строкой на загрузку), чтобы однозначно идентифицировать набор строк.

т.д .:

rowId, setId, col1, col2, ... 
1, 1, 'abc', 'def', ... 
2, 1, 'abc', 'def', ... 
3, 1, 'abc', 'def', ... 
4, 2, 'abc', 'def', ... 
5, 2, 'abc', 'def', ... 
6, 2, 'abc', 'def', ... 

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

+0

Предположим, что 20 файлов в день, с 3000 строк в каждом (наихудший случай прямо сейчас), он будет генерировать около 50/60.000 новых строк в день, которые будут составлять около 2 миллионов строк в месяц. Это может стать проблемой через несколько месяцев, я не прав? – Socket2104

+0

Я не знаю, зависит от того, что вы пытаетесь сделать с этими строками (объясняя, что нам поможет ответить на этот вопрос). В любом случае хранение таблицы в виде строки является неправильным способом ее выполнения и на самом деле не изменяет общий объем данных, которые необходимо сохранить ... это только делает данные менее эффективными для анализа, сортировки и т. Д. , и заставляет меня задаться вопросом, почему вы пытаетесь использовать базу данных. Что вы пытаетесь сделать с данными? –

+0

Я бы сказал то же самое. прежде всего, 40 столбцов для меня не слишком похожи. Что касается хранения ваших данных, все зависит от вашего ограничения на хранение в сервере (которое всегда можно обновить без ограничений) и необходимости поиска/анализа этих данных. Если после его сохранения он редко доступен, вам не нужно беспокоиться о проблемах с производительностью. Вы также можете сохранить ссылку на файл csv в базе данных и сохранить csv в файловой системе. – Joao

Смежные вопросы