Направляющие 2.0: Почему бы не использовать sqlite3?

Это хорошо? Довольно? Или я что-то пропустил?

blockquote>

Предикат Пролога =../2 [swi-doc] может «упаковать» и «распаковать» список, содержащий Имя функтора и его аргументы в термине и наоборот. Таким образом, можно использовать это для построения термина или для анализа термина. Например:

?- f(a,g(b,a)) =.. L.
L = [f, a, g(b, a)].

Здесь f - имя функтора, а a и g(b, a) - аргументы. Эти аргументы также могут быть терминами, и тогда нам нужно распаковать эти аргументы дальше.

Например, мы можем получить все подтермы терма с помощью:

subterms(T, T) :-
    \+ var(T).
subterms(T, ST) :-
    \+ var(T),
    T =.. [_|As],
    member(A, As),
    subterms(A, ST).

Например:

?- subterms(f(a,g(X,a)),N).
N = f(a, g(X, a)) ;
N = a ;
N = g(X, a) ;
N = a ;
false.

Теперь, когда мы получили все (под) термины, мы можем немного переписать предикат, чтобы подсчитать количество подходящих элементов:

subterm_query(Q, T) :-
    Q == T.
subterm_query(Q, T) :-
    \+ var(T),
    T =.. [_|As],
    member(A, As),
    subterm_query(Q, A).

, поэтому мы получим, если запросим a:

?- subterm_query(a, f(a,g(X,a))).
true ;
true ;
false.

Если мы сможем используя библиотеку aggregate , мы можем использовать предикат aggregate_all/3 для подсчета количества раз, предикат был успешным:

?- aggregate_all(count, subterm_query(a, f(a,g(X,a))), Count).
Count = 2.

Если нет, вам нужно реализовать механизм, который возвращает 1 для совпадения и рекурсивно суммирует совпадения дочерних терминов. Я оставляю это как упражнение.

7
задан Noah 14 February 2009 в 00:52
поделиться

7 ответов

SQLite является хорошим механизмом, но это - все еще в процессе (или рабочий стол) механизм стиля. В движках программы имеют свойственные слабые места с точки зрения параллелизма, которые делают их существенно плохим выбором по основанным на сервере механизмам как MySQL для веб-сайтов или других сценариев с потенциалом для большого одновременного доступа для записи.

Посмотрите эту страницу на веб-сайте SQLite:
http://www.sqlite.org/whentouse.html

SQLite обычно будет работать отлично как механизм базы данных для низких и средних транспортных веб-сайтов

и

если... Вы думаете об откалывании компонента базы данных на отдельную машину, то необходимо определенно рассмотреть использование клиент-серверного механизма базы данных промышленного класса вместо SQLite.

11
ответ дан 6 December 2019 в 07:53
поделиться

Я всегда начинаю с SQLite. Если я должен моделировать проект направляющих, я не могу быть в порядке в буквально никакое время вообще. Создайте некоторые леса, выполните мои миграции, запишите некоторые тесты, и я прочь к гонкам.

Однако, если и когда проект переходит к сути дела, где Вы будете развертывать его, я предложил бы MySQL или PostgreSQL для лучшей производительности.

SQLite также обладает своими преимуществами для маленьких встраиваемых приложений или если у Вас нет издержек для выполнения базы данных для инструмента, который будут использовать только несколько человек.

3
ответ дан 6 December 2019 в 07:53
поделиться

Начиная с направляющих 2.0, sqlite3 является базой данных по умолчанию, таким образом, конечно, нет предвзятости против него. Много учебных руководств по направляющим предшествуют направляющим 2.0, однако, когда база данных по умолчанию была MySQL.

Как несколько других упомянули, sqlite3 является прекрасной базой данных для быстро и легко подъем приложения и выполнение. Для Вашей среды разработки направляющих это имеет участки - это будет, вероятно, хорошо работать, как раз когда Ваше приложение становится сложным. Для тестовой среды направляющих это - также очень хороший выбор - это очень быстро, и большинство тестов имеет относительно простые требования базы данных и имеет тенденцию не требовать параллелизма или иначе сталкиваться с ограничениями sqlite3.

Однако для многих, если вообще, производственных веб-сайтов, DB, разработанный для большего параллелизма, может требоваться - MySQL, Пост-ГРЭС, и т.д.

2
ответ дан 6 December 2019 в 07:53
поделиться

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

Как заключенный в кавычки Joel, если Ваш сайт является низким трафиком, это редко будет проблемой, но на среднем действии я иногда получаю заблокированный DBS (и повешенные запросы). В этом случае DB с лучшей поддержкой нескольких-параллельных-пользователей лучше.

Лично, если я использую агностический DB слой для доступа к DB затем, легко переключиться от одного до другого, таким образом, легко запуститься с SQLite и переместиться в другой при необходимости.

4
ответ дан 6 December 2019 в 07:53
поделиться

Для чего-то как направляющие заносят механизм в блог, SQLite будет работать очень хорошо даже в довольно больших объемах потому что его все чтения и очень немного записей. На самом деле большинство Ваших хитов будет кэшируемыми страницами - в зависимости от того, если Вы позволите комментарии и насколько активный Ваши потоки комментария - Вам мог бы сойти с рук единственный процесс направляющих, потому что Ваш веб-сервер обработает почти каждый запрос.

С базой данных SQLite каждый процесс направляющих должен биться за файловую систему, соединяют файл, чтобы сделать записи, таким образом, Вы закончите тем, что блокировались много, если у Вас будет большая запись процессов. Способ думать об этом состоит в том, чтобы рассмотреть, сколько процессов направляющих Вы будете иметь..., если его испытывающим необходимость больше чем 3-4 затем, вероятно, SQLite не будет хороший выбор.

2
ответ дан 6 December 2019 в 07:53
поделиться

Обратите внимание, что Sqlite является механизмом по умолчанию для платформы Кемпинга. Имеет смысл с тех пор и нацелены на маленький и быстрое, не большое и enterprisey

0
ответ дан 6 December 2019 в 07:53
поделиться

Я думаю, что это - главным образом вопрос поддержания на низком уровне уровня трения на учебном руководстве. Если бы Вы - newby, я рекомендовал бы MySql только потому, что будет легче сделать учебное руководство. sqlite является прекрасным настольным решением иначе.

1
ответ дан 6 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: