Рекомендация базы данных - PullRequest
2 голосов
/ 11 апреля 2009

Я пишу приложение CAD (автоматизированного проектирования). Мне нужно будет отправить библиотеку 3d объектов с этим продуктом. Это простые объекты, состоящие из не более чем трехмерных координат, и их будет не более 300.

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

Но прежде чем я посвятим себя SQLite, я просто хочу спросить ваше мнение, является ли это хорошим выбором с учетом моих требований. Также есть ли альтернатива, которую я должен попробовать, прежде чем принимать решение?

Редактировать

Я не упомянул ранее, что вышеупомянутые объекты САПР, которые я отправлю, не будут неизменными. Я ожидаю, что пользователь будет редактировать их (изменять размеры, цвета и т. Д.) И сохранять обратно в библиотеку. Я также ожидаю, что пользователи будут добавлять свои новые созданные объекты. Пожалуйста, учтите это в своих ответах.

(Спасибо за ответы.)

Ответы [ 7 ]

3 голосов
/ 11 апреля 2009

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

Кроме того, объем данных и относительная простота позволяют предположить, что вы можете просто использовать плоский файл для хранения координат и считывать их в память при необходимости. Таким образом, вы можете спроектировать свои структуры данных так, чтобы они более точно отражали то, как вы собираетесь использовать эти данные, а не то, как вы собираетесь их хранить.

Многие языки предоставляют механизм для записи структур данных в файл и их повторного чтения, называемый сериализация . pickle Python - одна из таких библиотек, и я уверен, что вы можете найти ее для любого языка, который вы используете. По сути, просто спроектируйте свои классы или структуры данных в соответствии с тем, как они используются вашей программой, и используйте одну из этих библиотек сериализации для заполнения экземпляров этого класса или структуры данных.

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

Единственный случай, когда база данных была бы лучше, - это если у вас есть система, в которой несколько пользователей взаимодействуют и обновляют центральный репозиторий данных, и в таком случае вы бы смотрели на сервер базы данных, такой как MySQL, PostgreSQL или SQL Server для скорости и параллелизма.

Вы также отметили, что вы будете использовать C # в качестве языка. .NET поддерживает сериализацию , встроенную в , поэтому вы должны быть готовы к работе .

1 голос
/ 11 апреля 2009

Когда вы говорите, что у вас будет библиотека из 300 трехмерных объектов, я предполагаю, что вы имеете в виду объекты для своего кода, а не модели, которые будут создавать пользователи.

Я читал, что объектные базы данных хорошо подходят для решения проблем САПР, поскольку они идеально подходят для поиска длинных цепочек ссылок, характерных для сложных моделей. Возможно, что-то вроде db4o будет полезно в вашем контексте.

1 голос
/ 11 апреля 2009

Я предлагаю вам рассмотреть возможность использования H2 , это действительно легкий и быстрый.

0 голосов
/ 12 апреля 2009

SQL Server CE бесплатен, имеет небольшую площадь (не работает) и совместим с SQL Server

0 голосов
/ 11 апреля 2009

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

Первое, что приходит на ум, это то, что вы, вероятно, хотите, чтобы файл был обновляемым, т. Е. Вам нужно иметь возможность удалять и обновлять файл в приложении, не изменяя остальную часть приложения.

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

Для простоты (в некотором роде) XML-файл отлично подойдет, поскольку у вас хорошая структура. Используя это в качестве основы, вы можете затем сжать его, зашифровать, встроить как ресурс в сборку (если вы играете в .NET) и т. Д. И т. Д.

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

0 голосов
/ 11 апреля 2009

Я бы не использовал базу данных SQL. Вы можете легко описать каждый 3D-объект с помощью XML-файла. Упакуйте эти файлы в каталог и запакуйте (zip) все. Если вам нужен легкий доступ к метаданным объектов, вы можете сгенерировать индексный файл (только с именем или описанием), чтобы не все объекты анализировались и загружались в память (хорошо, если у вас есть что-то вроде менеджера библиотеки)

Существуют быстрые и легкие парсеры SAX, и вы можете легко написать XML-модуль записи (или найти какой-то бесплатный код, который вы можете использовать для этого).

Многие похожие приложения используют сегодня XML. Его легко анализировать / писать, он удобен для чтения и не требует много места, если его застегнуть на молнию.

Я использовал Sqlite, его легко использовать и легко интегрировать с собственными объектами. Но я бы предпочел базу данных SQL, такую ​​как Sqlite, больше для приложений, где вам нужны хорошие инструменты поиска для огромного количества записей данных.

0 голосов
/ 11 апреля 2009

Сколько объектов вы отправляете? Можете ли вы определить каждый из этих объектов и их координаты в XML-файле? Так в основном использовать отдельный файл XML для каждого объекта? Вы можете разместить эти XML-файлы в каталоге. Это может быть простая структура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...