LINUX.ORG.RU
ФорумTalks

БД vs файлы


0

0
Вот собственно такой вопрос.

Пусть есть таблица с двумя полями: id, text_value. И есть директория с файлами с именами id, которые содержает plaintext text_value.

Пусть есть скрипт, который должен считывать text_value по передаваемому значению id либо из таблицы, либо из файлов.

Возник спор, какой вариант быстрее?


Ответ на: комментарий от maxcom
А есть какие-нить тесты, насколько быстрее?

Впринципе, думаю, для большинства задач это не принципиально, но хотелось бы посмотреть.

Ximik
() автор топика
Ответ на: комментарий от maxcom
> Из файлов быстрее, но не будет фич которые можно получить от БД

не факт, все зависит от объема данных и настроек конкретной СУБД.
phasma ★☆
()
Ответ на: комментарий от r_asian
> Могу предложить промежуточный вариант: SQLite :-)

+1

tailgunner ★★★★★
()
По-твоему БД бывают только реляционными и похожими на MySQL? Твои файлы, в которых ты что-то хранишь, это тоже БД. А БД, в свою очередь - это тоже файлы.
mamay_cozak
()
Ответ на: комментарий от maxcom
> Из файлов быстрее

Ой не факт, особенно если читать строки потребуется не по порядку, а по условию. Индексы такие индексы.

Единственный плюс файлов - возможность править вручную.

r_asian ★☆☆
()
Мне, почему-то, кажется, что для этой задачи лучше подходит BDB.
Davidov ★★★★
()
Ответ на: комментарий от mamay_cozak
> По-твоему БД бывают только реляционными и похожими на MySQL?

ну иерархические еще не умерли, покажи мне полную коммерческую реализацию ООСУБД.

> Твои файлы, в которых ты что-то хранишь, это тоже БД. А БД, в свою очередь - это тоже файлы.


внутреннее представление может хранится и в оперативной памяти как бэ.
phasma ★☆
()
Ответ на: комментарий от mamay_cozak
> По-твоему БД бывают только реляционными и похожими на MySQL? Твои файлы, в которых ты что-то хранишь, это тоже БД. А БД, в свою очередь - это тоже файлы.

Ну дык, я же сказал про таблицы в БД.

Ximik
() автор топика
Ответ на: комментарий от sabonez
> Id в табличке индексировано?

ну это уже вопросы реализации, а у меня интерес чисто теоретический.

Ximik
() автор топика
Ответ на: комментарий от Ximik
> Ну дык, я же сказал про таблицы в БД.

тссс, это школьник, который знает про Оракл и майскуль и скулайт. Ща он нам покажет как можно выгибать пальцы до локтей.
phasma ★☆
()
Ответ на: комментарий от maxcom

Ганс прав.

"Если вы используете дополнительный слой для хранения данных у вас просто плохая файловая система." (Г. Райзер)
Camel ★★★★★
()
Ответ на: комментарий от Ximik
>> SQLite

> дык он же на порядок медленнее того же mySQL

Во-первых, нифига. Во-вторых, ему не нужен сервер (в отличие от).

tailgunner ★★★★★
()
Ответ на: комментарий от mamay_cozak
> просто люди не понимают, что отказываясь от готовой БД, они обречены написать свою

Ты тоже идиот, при больших объемах данных тебя ни одна СУБД не спасет, даже оракель.
phasma ★☆
()
Ответ на: комментарий от phasma
> тссс, это школьник, который знает про Оракл и майскуль и скулайт. Ща он нам покажет как можно выгибать пальцы до локтей

не понял смысла фразы.

Ximik
() автор топика
Из файлов
Deleted
()
Ответ на: комментарий от phasma
> тссс, это школьник, который знает про Оракл и майскуль и скулайт.

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

mamay_cozak
()
Ответ на: комментарий от phasma
> Ты тоже идиот, при больших объемах данных тебя ни одна СУБД не спасет, даже оракель.

И как это противоречит утверждению, которое ты цитировал? Прими антидепрессантов, офисному планктону помогает.

mamay_cozak
()
Ответ на: комментарий от tailgunner
> По ссылке показано, что SQLite быстрее, чем MySQL. Ты об этом?

это для win. Ниже в комментах тесты для linux

Ximik
() автор топика
Ответ на: комментарий от tailgunner
упс, пропустил

странный результат. Запустил ваш тест на своем dev сервере (Ubuntu Server, ядро 2.6, Apache 2, PHP 5.2.6) и получил тот результат на который, как я понял, вы надеялись:
SQLite:
0.0226039886475
0.0238060951233
0.0236310958862
0.015144109726
0.0120120048523
Average time:
0.019439458847

MySQL:
0.0117030143738
0.011342048645
0.0117700099945
0.0126521587372
0.0117499828339
Average time:
0.0118434429169

Количество итераций увеличено до 500:
SQLite

Average time:
0.0125000824928

MySql

0.0096476111412

я про это говорил
Ximik
() автор топика
Ответ на: Ганс прав. от Camel
"Если вы используете дополнительный слой земли для хранения тайны, то у вас просто несвежая русская жена." (он же)
gr_buza ★★★★
()
Эх, старый добрый итишный холиварчик "БД vs файлы". Что может быть лучше?
kajematez
()
Ответ на: комментарий от tailgunner
> Во-первых, нифига.

фигА-фигА. амарок поюзай с тем и с другим.

paramonov
()
Ответ на: комментарий от phasma
>не факт, все зависит от объема данных и настроек конкретной СУБД.

СУБД никогда не даст такой же производительности, как прямая работа с файлом.http://www.sql.ru/forum/actualthread.aspx?bid=10&tid=526955&pg=1&...

http://www.sql.ru/forum/actualthread.aspx?tid=461153&pg=1#4513798

http://www.sql.ru/forum/actualthread.aspx?bid=36&tid=649460#6965529

Karapuz ★★★★★
()
Ответ на: комментарий от Ximik
> Ниже в комментах тесты для linux

Это вроде как исправлено в 2.6.29.
atrus ★★★★★
()
>И есть директория с файлами с именами id, которые содержает plaintext text_value. Пусть есть скрипт, который должен считывать text_value по передаваемому значению id

открывать/читать/закрывать ради мелкого количества текста.. извращенно как-то..

stave ★★★★★
()
Ответ на: комментарий от Ximik
У sqlite ещё всё ужасно на параллельных запросах.
KRoN73 ★★★★★
()
Ответ на: комментарий от stave
Зависит от того, что потом с этим текстом делать.

Если прочитать, обработать, подставить в скрипт - то БД удобнее и быстрее.

Если отдать в браузер, например, готовую картинку, то файл будет на порядки быстрее.

От задачи и конкретных условий зависит.
KRoN73 ★★★★★
()
Всё сильно зависит от реализации. В конце концов никто не мешает разместить базу данных непосредственно в памяти, попутно выкинув overhead файловой системы (многие субд это позволяют делать). А если к этому добавить удобство sql, то работа с файлами станет явно бесперспективным вариантом.
Anoxemian ★★★★★
()
Всё зависит от задачи (ну и от количества файлов). Если данные константны (меняются очень редко) то по скорости, имхо, быстрее будут константные хеши (к примеру tinyCDB http://www.corpit.ru/mjt/tinycdb.html). Ещё быстрее будет: сделать индекс и смержить все данные в один файл. Индекс подгрузить в пямять, а файл читать через memory-mapped file или обычным чтением.

Если данные не константны - то неконстантные хеши (bdb, Die-Hard очень советовал tokyocabinet http://sourceforge.net/projects/tokyocabinet/). SQLite - в этом случае излишен.

Обычные базы данных не вариант.

Если делать на простых - то если хватает дискового кеша - надо прочитать их всех при загрузке программы. Они попадут в кеш и доступ будет очень быстрым.

stpg
()
Ответ на: комментарий от stpg
> константные хеши

> tokyocabinet

Хренасе рецепты для _скрипта_.

> SQLite - в этом случае излишен.

Он в этом случа оптимален.

tailgunner ★★★★★
()
А так:
 если        id : uniq integer
      text_value: varchar(N)

Все хранится в одном sparse-файле а-ля обычный массив с доступом по индексу --> О(1)

Прямой доступ к элементу:
    dd if=/db-array.file skip=ID bs=N count=1
sdio ★★★★★
()
Для работы с парами ключ-значения давным давно придумана такая штука, как Berkley DB. Автор, почитай про BDB - это то, что тебе надо.
Библиотеки под неё есть практически в каждом ЯП.
ovax ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.