March 2026

S M T W T F S
12 34567
891011121314
151617 18192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Friday, December 31st, 2004 03:01 pm
SQLIte, однако, изрядно сосёт.



1. Каждая таблица в SQLite обязательно имеет целочисленный ключ, явный или неявный. Несмотря на это, счёт элементов таблицы не ведётся и select count(*) from table на таблице из, скажем, нескольких тысяч записей - весьма дорогая операция.

2. Запрос типа SELECT * FROM big_table JOIN small_table ON big_table.f1=small_table.f2 WHERE big_table.id IN (SELECT id FROM other_table WHERE condition LIMIT 5) - очень долгий. То же самое, только сначала вручную внутренний SELECT, а потом вписать ручками результат в IN - быстро. Какая оптимизация, где?

3. Но это мелочи ещё. Вот поинтереснее: запрос типа SELECT * FROM big_table JOIN small_table ON big_table big_table.f1=small_table.f2 - выполняется медленнее, чем SELECT * FROM small_table JOIN big_table ON big_table big_table.f1=small_table.f2. Типа хотите оптимизатор запросов? Так сами себе и пишите.

4. EXPLAIN у них - тонкое издевательство. Зачем он вообще нужен, если выдаёт пачку непонятного никому, кроме автора, ассемблерного кода? Неужто так трудно сделать explain как в MySQL, хотя бы?

5. При больших запросах память жрёт, как собака, явно больше, чем выделено под его кеш. Хотя, может, это я не понял, как его определение кеша устроено.

6. Работает с базой из 100 тысяч, скажем, записей и 6 таблиц весьма медленно - возможно, из-за 2-3, хотя из-за 4 даже выяснить это можно только экспериментальным путём.


Мне, конечно, скажут - за что заплатил, то и получил. Тоже верно. Но судя по их сайту, ожидалось гораздо лучшего.
Friday, December 31st, 2004 01:37 pm (UTC)
А что это за зверь такой? MySQL знаю, SQLite - первый раз слышу. Из каких соображений второе предпочли первому? Не хотели код открывать, а с закрытым за MySQL дорого платить?
Friday, December 31st, 2004 01:43 pm (UTC)
-- 3. За MySQL таки надо платить денежки, и нехилые. SQLite - public domain.

Я детально вопросом не интересовался, но из того, что слышал - если ты работаешь под GPL, то есть открываешь свой код, то платить не надо. А если не хочешь код, тогда платишь.
Friday, December 31st, 2004 02:46 pm (UTC)
А PostgreSQL как?
Friday, December 31st, 2004 06:35 pm (UTC)
В каком аспекте?
Friday, December 31st, 2004 08:39 pm (UTC)
Ну спасибоб объяснили дуре, что такое GPL ;-)
Я спрашивала, как это так получается: неужели Вы делаете, как это бишь называется, производный от MySQL продукт? Ну типа, кто gcc использует, тот не обязан раздавать исходники. А что с MySQL?
Saturday, January 1st, 2005 08:09 pm (UTC)

«Поверьте, мы немножко знаем, что обязан, а что не обязан тот, кто пользуется MySQL - мы с ними не первый год работаем» — Да что Вы так волнуетесь, право слово. Я ж на Вас не наезжаю, типа, а просто спрашиваю.

«Думаю, что если вы включите в свой продукт gcc как интегральную часть продукта, то GPL будет на него распространяться точно так же» — Это интересный, кстати вопрос. То есть Вы имеете в виду, что это будет «производный продукт», если судить по Вашему высказыванию «вот если MySQL будет интегральной частью продукта - то разумеется, это попадёт под любое разумное определение "производного продукта"»? Я думала, честно говоря, что «производный продукт» это когда берут исходник (скажем gcc), немножко (или множко ;-) улучшают, и — вуаля — получили «новую» программу. А если, скажем, сделать вот что: веб-сервер, который получает от клиента программу на Си, компилирует её с помощью gcc и выдаёт обратно бинарник (только не придирайтесь, что это полный идиотизм — сама знаю ;-). Это ж не будет «производным продуктом», то есть скрипты, скажем, вызывающие gcc тогда не обязательно делать под GPL. Так? Я вот сейчас посмотрела в документацию и нашла там удивительную вещь: You need a commercial license: … When you distribute a non-GPL application that only works with the MySQL software and ship it with the MySQL software. This type of solution is considered to be linking even if it's done over a network. Это как раз напоминает мой фиктивный gcc-сервер. То есть они аппелируют не к понятию «производный продукт», а к понятию «linking», каковое тут, однако, очень широко трактуется. Это и есть что ли, примерно, Ваш случай? Получается, что MySQL имеет в виду «хошь делать несвободный программы — гони бабки»? Не совсем такой подход как у GNU.

«Так вот, даже для распостранения клиентской библиотеки MySQL…» — ну окей, я конечно про это и не подумала! Я всё думала про сам сервер, а без клиентской библиотеки ничего хорошего не напишешь: тут нужон «linking», а уж библиотека-то ясное дело не под LGPL — всё понятненько ;-(


Sunday, January 2nd, 2005 02:22 am (UTC)

Про то, что сервис по компиляции является «производным продуктом» я как-то не уверена. И вот почему: на сайте fsf.org есть список часто задаваемых вопросов (кажется, по-русски это дело называют ЧАВО ;-), и там есть такой вопрос: Q: What is the difference between "mere aggregation" and "combining two modules into one program"? (http://www.fsf.org/licenses/gpl-faq.html#MereAggregation) A: … много пропускаю, см. ссылку, если хотите … By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program. То есть я это так поняла, что эта хрень «программой» вовсе не является, то бишь и «applied work»-ом. Ну с другой стороны, адвокатам, конечно, виднее.

Ну да, насчёт бабок это Вы правильно подметили. Кстати они предлагают и дуальную услугу: You need a commercial license: … … … When you want to support the further development of the MySQL database even if you don't formally need a commercial license. ;-)

А насчёт GNU/FSF тут дело такое: разумеется Столмэн считает несвободные программы злом и всё такое (в чём я, честно говоря, его очень поддерживаю. Ой, чуйствую, достанется мне щас на орехи ;-). Я-то имела в виду, что в проекте GNU есть же такая хрень, как LGPL, без которой было бы практически невозможно писать не только несвободные, а даже не-GPL-ные программы для ОС Линукс (как-то сложно писать программы без glibc, ну то есть конечно можно, но сложно ;-).

А трюками обойти GPL лучше и не пытаться: в ней заложен универсальный контр-трюк: совет писать всегда, что лицензия это «GPL версии 2 или позднее». Так что если выяснится, что есть ловкий трюк, сразу родится версия три, которая его сведёт на нет. Я даже знаю, что уже намечено: сейчас можно сделать такой сайт, как я описала (для тех, у кого нет под рукой компилятора gcc: компилируем всего за $0.99 за тыщу строк кода ;-), но даже если считать, что он таки «производный продукт» и тем самым, автоматически GPL, вовсе не обязательно раскрывать исходные коды, это называется "нараспространённая программа", ибо сказано: Q: A company is running a modified version of a GPL'ed program on a web site. Does the GPL say they must release their modified sources? (http://www.fsf.org/licenses/gpl-faq.html#UnreleasedMods) A: The GPL permits anyone to make a modified version and use it without ever distributing it to others. What this company is doing is a special case of that. Therefore, the company does not have to release the modified sources. It is essential for people to have the freedom to make modifications and use them privately, without ever publishing those modifications … Но сказано далее в том же ответе: … However, putting the program on a server machine for the public to talk to is hardly "private" use, so it would be legitimate to require release of the source code in that special case. We are thinking about doing something like this in GPL version 3, but we don't have precise wording in mind yet … У FSF есть на всё готовый ответ ;-)


Friday, December 31st, 2004 04:50 pm (UTC)
Кто работал с zero-configuration embedded databases, типа HSQLDB, тот поймёт, что в некоторых случаях ставить целый сервер и потом его администрировать - перебор.

Лично мне в SQLite не хватает нормального JDBC-драйвера, ибо на плохо проверенный сторонний продукт в альфа-стадии мы полагаться не можем, а сами авторы таковой не написали.