Где хранится моя база данных в Slick? [Scala][Slick 3.0]

Я не особо уверен, что это правильный вопрос, но мне было интересно, где именно хранится моя база данных в Slick.

Например, если я следую примеру на http://slick.typesafe.com/doc/3.0.0/gettingstarted.html

Они создают таблицы:

// Definition of the SUPPLIERS table
class Suppliers(tag: Tag) extends Table[(Int, String, String, String, String, String)](tag, "SUPPLIERS") {
  def id = column[Int]("SUP_ID", O.PrimaryKey) // This is the primary key column
  def name = column[String]("SUP_NAME")
  def street = column[String]("STREET")
  def city = column[String]("CITY")
  def state = column[String]("STATE")
  def zip = column[String]("ZIP")
  // Every table needs a * projection with the same type as the table's type parameter
  def * = (id, name, street, city, state, zip)
}
val suppliers = TableQuery[Suppliers]

// Definition of the COFFEES table
class Coffees(tag: Tag) extends Table[(String, Int, Double, Int, Int)](tag, "COFFEES") {
  def name = column[String]("COF_NAME", O.PrimaryKey)
  def supID = column[Int]("SUP_ID")
  def price = column[Double]("PRICE")
  def sales = column[Int]("SALES")
  def total = column[Int]("TOTAL")
  def * = (name, supID, price, sales, total)
  // A reified foreign key relation that can be navigated to create a join
  def supplier = foreignKey("SUP_FK", supID, suppliers)(_.id)
}
val coffees = TableQuery[Coffees]

И тогда они заполняют его

 val setup = DBIO.seq(
  // Create the tables, including primary and foreign keys
  (suppliers.schema ++ coffees.schema).create,

  // Insert some suppliers
  suppliers += (101, "Acme, Inc.",      "99 Market Street", "Groundsville", "CA", "95199"),
  suppliers += ( 49, "Superior Coffee", "1 Party Place",    "Mendocino",    "CA", "95460"),
  suppliers += (150, "The High Ground", "100 Coffee Lane",  "Meadows",      "CA", "93966"),
  // Equivalent SQL code:
  // insert into SUPPLIERS(SUP_ID, SUP_NAME, STREET, CITY, STATE, ZIP) values (?,?,?,?,?,?)

  // Insert some coffees (using JDBC's batch insert feature, if supported by the DB)
  coffees ++= Seq(
    ("Colombian",         101, 7.99, 0, 0),
    ("French_Roast",       49, 8.99, 0, 0),
    ("Espresso",          150, 9.99, 0, 0),
    ("Colombian_Decaf",   101, 8.99, 0, 0),
    ("French_Roast_Decaf", 49, 9.99, 0, 0)
  )
  // Equivalent SQL code:
  // insert into COFFEES(COF_NAME, SUP_ID, PRICE, SALES, TOTAL) values (?,?,?,?,?)
)

val setupFuture = db.run(setup)

База данных существует исключительно в памяти?

Если я заполню базу данных из текстового файла, база данных останется только в памяти? Если да, то как мне перенести его на диск? Я даже на правильном пути здесь?


person S2C    schedule 08.07.2015    source источник
comment
Он говорит прямо здесь, что использует H2 в «режим в памяти». Вам нужно удалить mem, чтобы он записывал данные в файловую систему.   -  person Patryk Ćwiek    schedule 08.07.2015
comment
Если бы я удалил мем, где бы он был сохранен и в каком формате? Как мне получить к нему доступ снова? Я предполагаю, что вы имеете в виду удалить url = "jdbc:h2:mem:test1" здесь?   -  person S2C    schedule 08.07.2015
comment
Если вы спрашиваете, где хранятся файлы, это объясняется в FAQ/руководстве по H2, я дал ссылку прямо на него. Вы просто получите к нему доступ, снова указав ту же строку подключения (?). Если вы хотите заглянуть внутрь другими способами - я сомневаюсь, что вам повезет, я почти уверен, что формат файла непрозрачен.   -  person Patryk Ćwiek    schedule 08.07.2015
comment
Эй, извините, я просмотрел весь этот документ несколько раз, но я не думаю, что вижу то, что видите вы, потому что я не совсем уверен, что я ищу. Не могли бы вы указать, какие части упомянутого документа мне следует просмотреть? Я пытаюсь выяснить, где хранятся файлы базы данных, если бы мне нужно было восстановить память   -  person S2C    schedule 09.07.2015
comment
Вот и все: при использовании URL-адресов базы данных, таких как jdbc:h2:~/test, база данных хранится в пользовательском каталоге. Для Windows это обычно C:\Documents and Settings\‹userName› или C:\Users\‹userName›. Если базовый каталог не задан (как в jdbc:h2:test), файлы базы данных хранятся в каталоге, в котором запускается приложение (текущий рабочий каталог) (...) Каталог создается автоматически, если он еще не существует. Также можно использовать полное имя каталога (а для Windows — имя диска). Пример: jdbc:h2:file:C:/data/test   -  person Patryk Ćwiek    schedule 09.07.2015


Ответы (1)


Slick нигде не «хранит» базу данных. Slick — это библиотека, которая позволяет вам получать доступ к данным в базе данных. Обычно вы указываете, к какой базе данных вы хотите подключиться, используя jdbc "url-адрес подключения", например "jdbc:h2:mem:test1" в этом случае. Jdbc — это стандартный Java API для доступа к реляционным базам данных, и существует множество баз данных, для которых существуют драйверы jdbc.

Таким образом, при использовании Slick вы выбираете, с какой базой данных вы хотите его использовать: h2, postgres, mysql, oracle, sql server и т. д. Вам следует ознакомиться с документацией выбранной вами базы данных, чтобы узнать, где она хранит ваши данные. данные.

Я считаю, что причина, по которой Slick решила использовать h2 для своего начального примера, заключается в том, что h2 может работать в «режиме памяти», в котором данные хранятся только в памяти. В этом режиме данные являются чисто временными и теряются при завершении вашей программы. С другой стороны, также очень легко запустить h2 в постоянном режиме, когда данные хранятся на диске. Кроме того, у вас есть выбор запуска базы данных «встроенной» или «клиент/сервер».

Вам действительно следует обратиться к документации h2, чтобы понять больше (http://www.h2database.com/html/main.html). В частности, URL-адрес подключения jdbc дает вам контроль над тем, следует ли подключаться к временному экземпляру, экземпляру в памяти, встроенному экземпляру или удаленному экземпляру. См. http://www.h2database.com/html/features.html#database_url.

person JimN    schedule 09.07.2015
comment
Эй, спасибо, это было то, что я искал. В качестве продолжения, в чем разница между переходным и экземпляром в памяти? - person S2C; 10.07.2015
comment
Я использовал эти два прилагательных как дополняющие друг друга. Он временный, потому что он находится в памяти и будет потерян, когда процесс завершится. - person JimN; 10.07.2015