Магма, ТОВАРЫ, ГЛОРП или что-то еще?
Поэтому я пользуюсь Smalltalk около 6 месяцев (Squeak и Pharo), в основном занимаюсь анализом данных, и я собираюсь запустить свое первое приложение Seaside. Итак, мой вопрос ко всем вам, Smalltalkers, есть, какое ваше любимое решение для настойчивости? Я смотрю на Магму, ТОВАРЫ и ГЛОРП. Я давний хакер Python, поэтому я получаю ORM, но кажется, что Magma или GOODS были бы лучшим решением, так как они кажутся объектно-ориентированными.
Небольшое примечание: я хочу масштабировать свое приложение на нескольких виртуальных машинах, поэтому просто сохранение данных в образ не будет работать.
Спасибо!
3 ответа
Если вы хотите масштабировать несколько виртуальных машин, вы можете взглянуть на GemStone / S.
Имейте в виду, однако, что GemStone является проприетарным, коммерческим продуктом. Итак, вам придется заплатить за это. Однако модель ценообразования, как правило, разработана таким образом, что, если вам нужна более крупная версия, у вас, как правило, также есть пользователи, которые платят за эту версию. Цены начинаются с 0 $ для версии 4 GiByte disk / 1 GiByte RAM / 1 CPU.
Следует также отметить, что GemStone Smalltalk является собственным диалектом, поэтому ваш Squeak-код, вероятно, не будет работать без изменений, но его будет довольно легко переносить. (Например, инженеры GemStone создали адаптер, который позволяет загружать пакеты Monticello (системы контроля версий Squeak) в GemStone / S, а также они обычно обеспечивают запуск Seaside.)
Итак, что такое GemStone? По сути, это распределенная виртуальная машина с автоматическим сохранением объектов. Это легче объяснить по сравнению с обычной виртуальной машиной Smalltalk. Если у вас есть две виртуальные машины Smalltalk, работающие бок о бок, каждая из них имеет свою собственную объектную память (то есть то, чем управляет сборщик мусора). И эта Память Объекта находится в RAM. В GemStone все виртуальные машины в кластере совместно используют одну и ту же объектную память и живут на диске, а не в оперативной памяти. Таким образом, вам не нужна база данных, даже объектно-ориентированная, потому что ваши объекты "просто есть", везде и всегда.
(Это только очень упрощенное описание. Например, куча на самом деле не распределяется между виртуальными машинами. Это не имеет смысла, вы не захотите копировать каждый временный объект, который вы создаете в сети. Вместо этого у вас есть глобальное хранилище объект (в основном, словарь) и точно так же, как сборщик мусора запустится с какого-то известного корневого объекта, а затем сохранит все объекты, которые там достижимы, и удалит те, которые недоступны, GemStone начнется с объекта глобального репозитория, и сохранять / копировать только те объекты, которые достижимы оттуда.)
GemStone также имеет функции базы данных, поэтому доступ к глобальному репозиторию обернут в транзакции ACID, и есть язык запросов, основанный на SQL, но Smalltalkish.
У GemStone есть замечательное устройство, которое они называют " GLASS " (для GemStone, Linux, Apache, Seaside и Smalltalk), аналогичное известному "LAMP" (Linux, Apache, MySQL и PHP). GLASS включает бесплатную версию GemStone с предустановленной Seaside и все, что настроено с Apache на Xubuntu, все аккуратно упаковано в образ диска VMWare.
Только GLASS не поможет вам получить представление о ваших данных. SandstoneDB делает. Вы можете использовать SandstoneDB вместе с GOODS и GLASS (или даже в одиночку), в зависимости от того, сколько денег вы хотите потратить (Sandstone бесплатен во всех смыслах, GLASS коммерческий, но бесплатный, как бесплатное пиво для небольших установок).
Проверьте страницу песчаника DB. А вот и адаптер для товаров. Чтобы использовать SandstoneDB с GLASS, просто переключите хранилище на SDMemoryStore, см. Комментарии класса к SDMemoryStore в SandstoneDB.
Если вы можете выбрать, я бы также выбрал GLASS или Magma (это зависит от того, насколько велик проект).
Учтите, что GLorp в Squeak работает только с PostgreSQL. Мы разработали SqueakDBX, который является драйвером базы данных для связи с большинством баз данных. Сейчас мы модифицируем Glorp, чтобы вы могли использовать его со всеми (не только с PostgreSQL). Но это не будет до конца этого года.