Вы можете сделать резервную копию своей базы данных в репозитории git. Конечно, если вы поместите данные в git в двоичной форме, вы потеряете все возможности git для эффективного хранения данных с помощью diff (changes). Итак, лучшая практика номер один: хранить данные в текстовом сериализованном формате.
mysqldump - подходящая программа, которая поможет вам в этом. Однако это не идеально. Если что-то нарушает порядок сортировки элементов (например, в результате создания новых таблиц и т. Д.), Тогда в diff будут введены искусственные разрывы. Это снизит эффективность хранения. Вы можете написать собственный сериализатор для сериализации только изменений - но тогда вы делаете тяжелую работу, в которой git уже хорош. Просто используйте дамп sql.
. Говоря, то, что вы хотите сделать, это не то, что обычно подразумевают разработчики, когда они говорят о помещении базы данных в git. Например, если вы прочтете ссылку, помещенную ссылкой @eggyal ( на codinghorror ), вы увидите, что то, что фактически помещено в git, - это скрипты, необходимые для создания исходной базы данных. Могут быть дополнительные сценарии, например, для заполнения данных базы данных чистым состоянием или для заполнения его данными тестирования. Все такие sql-скрипты представляют собой текстовые файлы и почти такой же формат, как и sql-дамп, который вы получите от mysqldump. Поэтому нет причин, по которым вы не можете так поступать с вашими повседневными данными.
Если Вы не полностью связываетесь с компиляцией, решения как Beanshell, отличный и другие языки сценариев, легко встраиваются (на самом деле, Java имеет встроенную поддержку того, чтобы включить язык сценариев, таким образом, Ваш код даже не знает, какой язык сценарий записан в)
, Beanshell должен выполнить любой 100%-й код Java IIRC, и я полагаю, что Groovy может выполнить большую часть кода Java - возможно все.
JCI выглядит хорошо. Этот фрагмент кода должен быть Вашей базой:
JavaCompiler compiler = new JavaCompilerFactory().createCompiler("eclipse");
MemoryResourceReader mrr = new MemoryResourceReader();
mrr.add("resource name string", yourJavaSourceString.getBytes());
MemoryResourceStore mrs = new MemoryResourceStore();
CompilationResult result = compiler.compile(sources, mrr, mrs);
// don't need the result, unless you care for errors/warnings
// the class should have been compiled to your destination dir
Какая-либо причина это не должно работать?
<час> Редактирование: добавилMemoryResourceStore
для отправки вывода скомпилированного класса в память, как требуемый. кроме того, настройки установки javac
, как путь к классу в Вашем случае, могут быть сделаны через setCustomArguments(String[] pCustomArguments)
в JavacJavaCompilerSettings
класс.
Вы могли бы хотеть проверить Янино также.
От их веб-сайта:
Янино является компилятором, который читает выражение JavaTM, блок, тело класса, исходный файл или ряд исходных файлов, и генерирует байт-код JavaTM, который загружается и выполняется непосредственно. Янино не предназначается, чтобы быть средством разработки, но встроенным компилятором в целях компиляции во время выполнения, например, средствами анализа выражения или "механизмами" страниц сервера как JSP.
Im в настоящее время с помощью него в довольно большом проекте в жестком реальном времени и он работает просто великолепно
Выполненный в веб-контейнере как Tomcat и сначала генерируют страницу JSP и затем вызывают его.
Это также позволяет Вам избавляться от старых определений классов путем простой перезаписи страницы JSP вместо того, чтобы иметь classloader, медленно выполняемый полный.
требование "в оперативной памяти" из-за скорости или из-за не изменения кодовой базы?