Avatar
1
Nguyen An Beginner
Nguyen An Beginner
Chuyển đổi data từ SQL Server sang Maria DB
Xin chào mọi người , hiện em đang có một project về Quản lý khách sạn , dữ liệu hiện tại đang lưu trong SQL Server ( hàng ngàn record ) . Giờ em muốn thiết kế ứng dụng web dùng giải pháp API để chuyển data từ SQL Server sang Maria DB . Hiện em chưa có hướng giải quyết bài toán . Mọi người có thể cho em một hướng giải quyết được với ạ.
  • Answer
sql server maria db
Remain: 5
1 Answer
Avatar
monkey Beginner
monkey Beginner
  1. Hàng ngàn record là con số quá nhỏ em ạ, tuy nhiên nếu em vẫn lo ngại dữ liệu quá lớn và hiệu năng kém, em có thể tham khảo 1 trong các cách phân trang dữ liệu này nhé: https://tvd12.com/data-pagination/

Mỗi lần gọi API em sẽ lấy ra một trang cho đến khi nào đến trang cuối thì thôi, cách đơn giản nhất là ORDER BY trường id em ạ.

  1. Tuy nhiên anh nghĩ là em hoàn toàn có thể kết nối đến 2 database cùng 1 lúc và mã nguồn sẽ kiểu thế này em ạ:

<span><span>class</span> <span>Migrator</span> </span>{
    <span>private</span> SqlServerRepository sqlServerRepository;
    <span>private</span> MariaDBRepository mariaDBRepository;
    <span>private</span> MigrateHistoryRepository migrateHistoryRepository;

    <span><span>public</span> <span>void</span> <span>migrate</span><span>()</span> </span>{
        Thread newThread = <span>new</span> Thread(() -> {
            <span>long</span> lastId = migrateHistoryRepository.getLastMigratedId();
            <span>while</span> (<span>true</span>) {
                List<Entity> entities = sqlServerRepository.findByIdGt(lastId);
                <span>if</span> (entities.isEmpty()) {
                    <span>break</span>;
                }
                mariaDBRepository.save(entities);
                lastId = entities.get(entities.size() - <span>1</span>).getId();
            }
        });
        newThread.start();
    }
}

<span><span>interface</span> <span>MigrateHistoryRepository</span> </span>{

    <span><span>void</span> <span>saveLastMigratedId</span><span>(<span>long</span> lastMigratedId)</span></span>;

    <span><span>long</span> <span>getLastMigratedId</span><span>()</span></span>;
}

<span><span>interface</span> <span>SqlServerRepository</span> </span>{

    <span>@EzyQuery</span>(<span>"SELECT e FROM Entity e WHERE e.id > ?0"</span>)
    <span>List<Entity> <span>findByIdGt</span><span>(<span>long</span> idExclusive)</span></span>;
}

<span><span>interface</span> <span>MariaDBRepository</span> </span>{

    <span><span>void</span> <span>save</span><span>(Entity entity)</span></span>;

    <span><span>void</span> <span>save</span><span>(List<Entity> entities)</span></span>;
}

<span>@Data</span>
<span><span>class</span> <span>Entity</span> </span>{
    <span>private</span> <span>long</span> id;
}
  • 1
  • Reply
Em hiểu ý của anh rồi ạ , em sẽ thực hiện thử , cảm ơn anh nhiều a !  –  Nguyen An 1668107819000
Ok em, cần gì hỏi anh tiếp nhé.  –  monkey 1668117339000