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 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.