Мы рассматриваем реализацию Couchbase для iPad-приложения, созданного с помощью Xamarin.IOS. Это первый раз, когда мы копаем в Couchbase и хотим убедиться, что наш прецедент - это то, что можно сделать с Couchbase.Является ли Couchbase Lite предназначенным для запроса данных?
Наш основной случай использования - возможность запросить данные, хранящиеся в базе данных NoSQL. Представления выглядят как единственный способ сделать это. Кажется странным, что фактический документ не может быть запрошен напрямую, как и другие базы данных NoSQL, такие как MongoDB.
Say наши данные в следующем формате:
{
"Id":1,
"FirstName":"John",
"LastName":"Doe",
"DepartmentId":1,
"StatusId":2
}
Мы хотели бы запросить эти данные следующим образом:
- Все записи с DepartmentID = 1
- Все записи с StatusId = 2
- Все записи с DepartmentId = 1 И StatusId = 2
- Все записи с отчетом mentId = 1 ИЛИ StatusId = 2
Из этой презентации http://www.slideshare.net/Couchbase/advanced-couchbase-lite Я вижу, что мы можем создать представление с помощью составного ключа. Что-то вроде [DepartmentId, StatusId]
Но мы не можем запросить только одну часть составного ключа. Couchbase, кажется, возвращает результаты только в том случае, если переданы обе части составного ключа, например. [1, 2] Это вернет все записи в отдел 1 & статус 2.
Возможно ли это с Couchbase? Или мы должны смотреть на какое-то другое решение? Мы не хотим идти по пути SQL, потому что у нас довольно сложные объекты JSON, и мы не хотим беспокоиться о преобразовании его в табличные данные. NOSQL - это путь вперед, но это неправильная база данных NOSQL для нас?
C#, что мы пытались:
// Create the View
var view = db.GetView("all-docs");
view.SetMap((doc, emit) =>
{
var keys = new List<object>();
keys.Add(doc["DepartmentId"].ToString());
keys.Add(doc["StatusId"].ToString());
emit(keys, doc);
}, "1");
// Create Query
var query = view.CreateQuery();
List<Object> searchQuery = new List<Object>();
List<Object> key = new List<Object>();
// Add Query for Keys
key.Add(status);
key.Add(priority);
searchQuery.Add(key);
query.Keys = searchQuery;
// Run Query
var results = await query.RunAsync();
Наконец, любые тесты на производительность Couchbase Lite запросов, если мы имеем дело с около 1000-5000 объектов?
1000-5000 объектов невероятно мало для любого типа базы данных. – jgauffin
вы можете даже сериализовать 5000 объектов как JSON в плоский файл (по одному объекту в строке) и получить производительность при его запросе. – jgauffin
Объекты довольно сложны и велики, а также можно увеличить их число, поскольку мы увеличиваем сущности, которые хранятся в автономном режиме. Но да, запросы будут в основном на основных объектах, а не на вложенных объектах. Вопрос заключается в том, является ли couchbase правильным nosql db для этих запросов. – Yashvit