У меня есть 2 миллиона строк в плоской таблице db4o.Большая часть информации повторяется - например, в первом столбце есть только три возможные строки.
Я мог бы легко разбить таблицу на 4-уровневую иерархию (т.е. перейти от корня >> символа >> даты>> финальная таблица) - но стоит ли это с точки зрения скорости и обслуживания программного обеспечения?
Если окажется, что было бы чище разбить таблицу на иерархию, любые рекомендации относительно хорошего методадобиться этого в рамках существующей структуры db4o?
Ответы на вопросы
Чтобы ответить на ваш вопрос, мне понадобится дополнительная информация.Какую информацию вы храните?
Я храню объекты, содержащие строки и двойные числа.В принципе, иерархия в точности похожа на файловую систему с каталогами, подкаталогами и подкаталогами: один корневой узел содержит массив подклассов, а каждый подкласс, в свою очередь, содержит дополнительные массивы подподходов.-классы и т. д. Вот пример кода:
// rootNode---|
// sub-node 1----|
// |-----sub-sub-node 1
// |-----sub-sub-node 2
// |-----sub-sub-node 3
// |-----sub-sub-node X (others, N elements)
// sub-node 2----|
// |-----sub-sub-node 1
// |-----sub-sub-node 2
// |-----sub-sub-node 3
// |-----sub-sub-node X (others, N elements)
// sub-node 3----|
// |-----sub-sub-node 1
// |-----sub-sub-node 2
// |-----sub-sub-node 3
// |-----sub-sub-node X (others, N elements)
// sub-node X (others, N elements)
class rootNode
{
IList<subNode> subNodeCollection = new List<subNode>();
string rootNodeParam;
}
class subNode
{
IList<subSubNode> subSubNodeCollection = new List<subSubNode>();
string subNodeParam;
}
class subSubNode
{
string subSubNodeParam;
}
// Now, we have to work out a way to create a query that filters
// by rootNodeParam, subNodeParam and subSubNodeParam.
А каковы схемы доступа к вашим данным?Читаем отдельные объекты по запросу / поиску.Или вы читаете много объектов, которые связаны друг с другом?.
Я пытаюсь перемещаться по дереву, фильтруя по параметрам по ходу.
В целом db4o (и другие объектные базы данных) хороши в навигационном доступе.Это означает, что вы сначала запрашиваете некоторые объекты, и оттуда вы переходите к связанным объектам.Например, вы сначала запрашиваете пользовательский объект.Оттуда вы переходите к пользователям дома, города, работы, друзей и т. Д. Объектов.Этот тип доступа прекрасно работает в db4o.
Это именно то, что я пытаюсь сделать, и именно то, что хорошо работает в db4o, если у вас есть только 1-1 сопоставления между классами и подклассами.Если у вас есть 1-ко-многим, реализуя ArrayList классов внутри класса, он не может выполнить запрос без создания экземпляра всего дерева - или я заблуждаюсь об этом?
Так что вВаш пример в вашем случае 4-уровневая иерархия может отлично работать с db4o, но только тогда, когда вы можете перейти от корня к объекту символа и так далее.Это означает, что корневой объект имеет коллекцию своего дочернего объекта
Да - но есть ли способ сделать запрос, если каждый подузел содержит коллекцию?