Попытка создать таблицу с уникальным именем для каждого экземпляра приложения. - PullRequest
1 голос
/ 30 марта 2020

Новое в базах данных. Возникла проблема, когда я хочу, чтобы каждый экземпляр приложения имел свою собственную базу данных. Попытка выяснить, как реализовать это с текущей настройкой ORM. В настоящее время используется постоянство Javax. У кого-нибудь есть решение этой проблемы?

SIMPLE : Хотите иметь уникальное имя для каждой таблицы

    //thread safe
    private EntityManagerFactory emf;
    public ImageDAOManager(EntityManagerFactory emf) {
        this.emf = emf;
    }
....

@Entity
public class ImageDAO implements Serializable {
    @Id
    private String path;
    private int fileSize;
    private long date;
    private int imageHeight;
    private int imageWidth;
    private double latitude;
    private double longitude;
    private String tags;

    public ImageDAO(String path, int fileSize, long date, int imageHeight, int imageWidth, double latitude, double longitude) {
        this.path = path;
        this.fileSize = fileSize;
        this.date = date;
        this.imageHeight = imageHeight;
        this.imageWidth = imageWidth;
        this.latitude = latitude;
        this.longitude = longitude;
        this.tags = "";
    }
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence"
             version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">

    <persistence-unit name="LecturePU" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>backend.database.ImageDAO</class>
        <properties>
            <!--username and password is temporarily here-->
            <property name="javax.persistence.jdbc.url" value="" />
            <property name="javax.persistence.jdbc.user" value="" />
            <property name="javax.persistence.jdbc.password" value="" />
            <!-- EclipseLink should create the database schema automatically -->
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
            <property name="eclipselink.ddl-generation.output-mode" value="database" />
        </properties>
    </persistence-unit>
</persistence>```

1 Ответ

0 голосов
/ 31 марта 2020

Наличие новой базы данных для каждого экземпляра вашего приложения, безусловно, не является правильным решением. Вместо этого вам следует обратиться к мультитенантным приложениям, я бы предложил эту статью: https://dzone.com/articles/multi-tenancy-using-jpa-spring-and-hibernate-part

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

Быстрое решение проблемы - иметь такой столбец, как tenant_id или даже просто instance_id, который поможет вам обеспечить запрос данных только для этого экземпляра.

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