Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Веб-программирование > JavaScript / HTML

JavaScript / HTML Создание динамической разметки страниц

Ответ
 
Опции темы
Старый 01.10.2013, 09:53   #31
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Node.JS + MongoDB

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

Для регулярок, тебе нужно использовать `new RegExp()`. А чтобы использовать индексацию по полю, то можешь сделать так:
new RegExp('^' query
Что говорит "начинается с". Естественно это зависит от капитализации символов, поэтому ты может захочешь хранить копию текста с toLowerCase() заранее. Индексация как понимаю будет tree с нодами по алфавиту, что очень продуктивно, тебе не нужно париться как индекс работает и т.п., главное создай индекс по полю. Да и советую убедиться что в регулярке нету ничего "опасного", т.к. сделать её очень тяжолой - весьма просто, следственно и загрузить твою БД, сложной регуляркой не составит труда.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (01.10.2013)
Старый 01.10.2013, 10:25   #32
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,504
Написано 2,959 полезных сообщений
(для 5,234 пользователей)
Ответ: Node.JS + MongoDB

Мне с индексами не судьба, хочу имена кланов сделать с именами типа -=М.О.Й.К.Л.А.Н=-
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 01.10.2013, 10:40   #33
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Node.JS + MongoDB

И что мешает это всё равно заиндексировать?
Можно сделать массив `search` который будет содержать 2 вида строк: в нижнем регистре и в нижнем регистре без знаков.
Далее простой индекс по этому полю `search`, и затем поиск будет весьма продуктивен.
Главное это escape'ить регулярные знаки в прописные, например . в \. и т.п.
Далее поиск будет работать по таким запросам:
-=м.О.Й.к.л
мой
МоЙКЛаН
мо
-=м.
Что для поиска думаю вполне достаточно и гравное это будет очень быстрым поиском.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (02.10.2013)
Старый 03.10.2013, 10:33   #34
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,504
Написано 2,959 полезных сообщений
(для 5,234 пользователей)
Ответ: Node.JS + MongoDB

Ближайший вопрос, который хотелось бы решить - это резервное копирование базы. Как это правильно сделать?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 03.10.2013, 14:41   #35
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Node.JS + MongoDB

Backup?

Есть трои принятых способа бэкапить бд, первый будет используя mongoexport/mongoimport второй mongodump/mongorestore, и снапшот системы (это для облаков).

mongoexport/mongoimport
Оперирует JSON данными, и предусмотрен к бэкапу только данных и не содержит никаких мета данных. Также т.к. данные в JSON формате, а он ненмого будет побольше чем BSON, нужно больше места для его хранения.
Плюс при импорте, подразумевается что у тебя уже есть сама база данных с коллекциями и всеми индексами.
Думаю это удобно для быстрого копирования блока данных между базами, но не совсем для бэкапов.

mongodump/mongorestore
Этот способ реально хорошо справляется с бэкапами, делает полную копию данных самих коллекций и всей базы (если на всю делаешь), хранит данные в BSON (что оптимальнее), а также хранит мета данные о коллекциях, индексах и других плюшках для полной копии восстановления.

Snapshot of System
Этот подход используется в облаках, когда ты можешь создать полную копию текущей системы. Такие снапшоты обычно весьма весомы, т.к. бэкапят всё что есть на системе а не только бд. Если у тебя большая бд и много ресурсов на системе - тебе такой вариант не подойдёт.


Я использую mongodump/mongorestore, с ним можно дампить как всю бд, так и отдельные базы данных, так и более детально - отдельные коллекции.
Учти что при mongorestore, если есть уже бд и коллекция - то данные добавяться паралельно к прошлым, так что если ресторишь, то удаляй коллекцию или всю бд (если всю бд ресторишь).

Я написал скрипт который запускается каждый день в 3 ночи, используя node.js, он используя child_process вызывает command line для mongodump, который в свою очередь создаёт папку. Далее я это дело tar'ю, и заливаю там же скриптом на S3 Bucket, где стоит правило - автономно удалять файлы старее 1го месяца.

Всё автономно, и никакой парки, плюс бэкапяться у меня две базы данных за один подход как два разные tar'а.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (03.10.2013)
Старый 04.10.2013, 13:00   #36
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,504
Написано 2,959 полезных сообщений
(для 5,234 пользователей)
Ответ: Node.JS + MongoDB

Все еще не очень понимаю вот это: http://nodejs.org/api/buffer.html
'binary' - A way of encoding raw binary data into strings by using only the first 8 bits of each character. This encoding method is deprecated and should be avoided in favor of Buffer objects where possible. This encoding will be removed in future versions of Node.
Как правильно с бинарными данными работать в node js?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 04.10.2013, 14:34   #37
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Node.JS + MongoDB

Что конкретно тебе нужно с бинарными данными?
(Offline)
 
Ответить с цитированием
Старый 04.10.2013, 18:23   #38
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,504
Написано 2,959 полезных сообщений
(для 5,234 пользователей)
Ответ: Node.JS + MongoDB

Хочу научиться работать с бинарными данными как с MemoryStream в C#. Хочу свой протокол сериализации реализовать в будущем для клиентсервера.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 04.10.2013, 18:29   #39
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Node.JS + MongoDB

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

1. Писать Addon на С++ для парсинга бинарных данных в JSON объект.
2. Заюзать готовые решения для этого, например protobuf.
3. Взять готовое решение на С++, и написать враппер/addon для него, например Cap'n Proto отличный выбор будет.

Для начала и JSON'а хватает с головой. Если качественно написать логику сбора данных, то заменить сборку и разборку данных сможешь потом без проблем.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (04.10.2013)
Старый 10.10.2013, 06:05   #40
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,504
Написано 2,959 полезных сообщений
(для 5,234 пользователей)
Ответ: Node.JS + MongoDB

Больше всего в ноде не нравится то, что приходится делать вот такие "елки":



Особенно в те моменты когда есть асинхронные ветвления (иногда необходимо сделать лишний запрос в базу, а иногда нет). Я тогда справляюсь с использованием функций, которые вызываю несколько раз в ветвлении.

К примеру (функция addRequest):
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.10.2013, 09:47   #41
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Node.JS + MongoDB

Угу, эта проблема популярна. Один из хороших вариантов "решения" её будут promise. Можно chain'ить асинхронные запросы как угодно, и отлавливать ошибки лучше.
И на err ты не проверяешь нигде ..
(Offline)
 
Ответить с цитированием
Старый 10.10.2013, 09:59   #42
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,504
Написано 2,959 полезных сообщений
(для 5,234 пользователей)
Ответ: Node.JS + MongoDB

Сообщение от moka Посмотреть сообщение
И на err ты не проверяешь нигде ..
Мне проще проверить результат на наличие)
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.10.2013, 10:03   #43
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Node.JS + MongoDB

Сообщение от pax Посмотреть сообщение
Мне проще проверить результат на наличие)
Результата может не быть, и ошибки может не быть, например просто не найден.
А ошибка указывает на ошибку в запросе, что порой ведёт к неприятным последствиям. Суть ловли ошибок, приводит к отслеживанию где запросы были не хорошие, и заставляет разраба валидить данные в запрос лучше.

Например если ты где-то забыл убрать "неприятные" символы в стринге, что приводит к регулярке, а это очень неприятно для бд.. Или объект для фильтров собрал нехороший А порой претендуешь что есть переменная в документе, а её нету, тоже бывает такие дела..
(Offline)
 
Ответить с цитированием
Старый 10.10.2013, 10:37   #44
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,504
Написано 2,959 полезных сообщений
(для 5,234 пользователей)
Ответ: Node.JS + MongoDB

ну наличие переменных в документе я проверяю там где надо, да и обработки ошибок я когда-нибудь впишу, когда появится на это время)
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.10.2013, 11:04   #45
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Node.JS + MongoDB

Вот поковырялся, я писал для себя сам мелкие функции для chain'ов асинхронных функций, но можешь заюзать async https://github.com/caolan/async там етсь например series - запускает функции поочереди. Думаю там можно также вставлять по пути до функции (task injection), и т.п.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 02:15.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com