Phân trang cơ sở dữ liệu là gì?

Bài đăng này sẽ nói về cách phân trang tại Jakarta EE với thông số kỹ thuật mới. Jakarta NoQuery

qua

Otavio Santana

CỐT LÕI ·

Tháng 7. 30, 19 · Hướng dẫn

Giống

Nhận xét

Tiết kiệm

tiếng riu ríu

Chia sẻ

9. 35K Lượt xem

Tham gia cộng đồng DZone và có được trải nghiệm thành viên đầy đủ

Tham gia miễn phí

Phân trang là quá trình tách nội dung thành các trang rời rạc. Mỗi trang có một danh sách các thực thể từ cơ sở dữ liệu. Việc phân trang cho phép truy xuất một số lượng đáng kể các phần tử từ kho dữ liệu thành các khối nhỏ, e. g. , nó trả về mười trang với một trăm mục thay vì trả về một nghìn mục trong một cú đánh lớn vào công cụ lưu trữ. Bài đăng này sẽ nói về cách thực hiện phân trang tại Jakarta EE với thông số kỹ thuật mới. Jakarta NoQuery

Bài đăng này sẽ sử dụng MongoDB với một thực thể Xe hơi để chứng minh cách phân trang hoạt động tại Jakarta NoSQL API

Cơ sở dữ liệu MongoDB phải đang chạy khi máy chủ hoạt động, vì vậy bạn có thể hoặc sử dụng hình ảnh Docker rồi chạy lệnh

docker run -d --name mongodb-instance -p 27017:27017 mongodb

Dự án là một dự án Java SE với CDI 2. 0 và Jakarta NoSQL chạy qua maven; . Dự án Jakarta NoSQL đã được phê duyệt nhưng chưa phải là phiên bản cuối cùng; .  file. The Jakarta NoSQL project has been approved, but it isn't a final version; therefore, the sample uses a SNAPSHOT version.


    4.0.0
    Artemis Demo using Java SE MongoDB with pagiantion
    org.jnosql.artemis
    pagination
    0.1.0-SNAPSHOT

    
        UTF-8
    

    
        
            org.jnosql.artemis
            artemis-document
            ${project.version}
        
        
            org.jnosql.diana
            mongodb-driver
            ${project.version}
        
        
            org.jboss.weld.se
            weld-se-shaded
            ${weld.se.core.version}
        
        
            org.eclipse
            yasson
            ${json.b.version}
        
    

    
        
            oss.sonatype.org-snapshot
            //oss.sonatype.org/content/repositories/snapshots
            
                false
            
            
                true
            
        
    

Thực thể 


    4.0.0
    Artemis Demo using Java SE MongoDB with pagiantion
    org.jnosql.artemis
    pagination
    0.1.0-SNAPSHOT

    
        UTF-8
    

    
        
            org.jnosql.artemis
            artemis-document
            ${project.version}
        
        
            org.jnosql.diana
            mongodb-driver
            ${project.version}
        
        
            org.jboss.weld.se
            weld-se-shaded
            ${weld.se.core.version}
        
        
            org.eclipse
            yasson
            ${json.b.version}
        
    

    
        
            oss.sonatype.org-snapshot
            //oss.sonatype.org/content/repositories/snapshots
            
                false
            
            
                true
            
        
    
1   có năm thuộc tính. id, nhà cung cấp, kiểu máy, năm và màu sắc.

import jakarta.nosql.mapping.Column;
import jakarta.nosql.mapping.Entity;
import jakarta.nosql.mapping.Id;

@Entity
public class Car {

    @Id
    private Long id;

    @Column
    private String provider;

    @Column
    private String model;

    @Column
    private Integer year;

    @Column
    private String color;


    @Override
    public String toString[] {
        return "Car{" +
                "id=" + id +
                ", provider='" + provider + '\'' +
                ", model='" + model + '\'' +
                ", year=" + year +
                ", color='" + color + '\'' +
                '}';
    }
}

Chúng tôi sẽ sử dụng Mockaroo để tạo thông tin ô tô, sau đó chuyển đổi JSON này thành truy vấn chèn Jakarta NoSQL

insert Car {"_id":1,"provider":"Dodge","model":"Caravan","year":2006,"color":"Teal"}
insert Car {"_id":2,"provider":"Lamborghini","model":"Aventador","year":2012,"color":"Blue"}
insert Car {"_id":3,"provider":"Mitsubishi","model":"Pajero","year":1997,"color":"Green"}
insert Car {"_id":4,"provider":"Mazda","model":"Miata MX-5","year":2005,"color":"Mauv"}
insert Car {"_id":5,"provider":"Dodge","model":"Aries","year":1981,"color":"Blue"}
insert Car {"_id":6,"provider":"Ford","model":"Windstar","year":1995,"color":"Yellow"}
insert Car {"_id":7,"provider":"Subaru","model":"Impreza","year":1999,"color":"Purple"}
insert Car {"_id":8,"provider":"Plymouth","model":"Acclaim","year":1995,"color":"Khaki"}
insert Car {"_id":9,"provider":"Audi","model":"200","year":1990,"color":"Puce"}
insert Car {"_id":10,"provider":"Kia","model":"Spectra","year":2009,"color":"Crimson"}
insert Car {"_id":11,"provider":"Volkswagen","model":"Golf","year":2001,"color":"Crimson"}
insert Car {"_id":12,"provider":"Chevrolet","model":"Silverado 1500","year":2008,"color":"Indigo"}
insert Car {"_id":13,"provider":"Studebaker","model":"Avanti","year":1961,"color":"Turquoise"}
insert Car {"_id":14,"provider":"Audi","model":"100","year":1994,"color":"Purple"}
insert Car {"_id":15,"provider":"Ford","model":"Taurus","year":2003,"color":"Maroon"}
insert Car {"_id":16,"provider":"GMC","model":"Acadia","year":2010,"color":"Indigo"}
insert Car {"_id":17,"provider":"Toyota","model":"Camry Hybrid","year":2011,"color":"Violet"}
insert Car {"_id":18,"provider":"Buick","model":"Roadmaster","year":1996,"color":"Purple"}
insert Car {"_id":19,"provider":"Mercury","model":"Monterey","year":2006,"color":"Mauv"}
insert Car {"_id":20,"provider":"GMC","model":"Sierra","year":2010,"color":"Violet"}

Chúng tôi sẽ có một nhà cung cấp truy vấn đọc tệp NoSQL và trả về danh sách các truy vấn

import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;

@ApplicationScoped
class QuerySupplier implements Supplier {

    private List queries;

    @PostConstruct
    void init[] throws IOException {
        final URL resource = QuerySupplier.class.getClassLoader[].getResource["cars.nosql"];
        this.queries = Files.readAllLines[Paths.get[resource.getFile[]]];
    }

    @Override
    public List get[] {
        return Collections.unmodifiableList[queries];
    }
}

Trên mã mẫu đầu tiên, chúng tôi đang chèn các truy vấn và sau đó chọn tất cả từ cơ sở dữ liệu. Hai mươi phần tử là một số nhỏ, nhưng truy vấn này gây nguy hiểm cho hiệu suất. Thật vậy, nó có thể trả về hàng ngàn với cùng một truy vấn. Một số cơ sở dữ liệu đặt giới hạn mặc định, chẳng hạn như Cassandra, nơi nó xác định hoàn toàn mười nghìn phần tử. Mười nghìn vẫn là một con số khổng lồ để hiển thị cho người dùng và nó trả về trong ứng dụng REST;

import jakarta.nosql.mapping.document.DocumentTemplate;

import javax.enterprise.inject.se.SeContainer;
import javax.enterprise.inject.se.SeContainerInitializer;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.function.Supplier;

import static jakarta.nosql.document.DocumentDeleteQuery.delete;

public class App {


    public static void main[String[] args] throws IOException {

        try [SeContainer container = SeContainerInitializer.newInstance[].initialize[]] {

            DocumentTemplate template = container.select[DocumentTemplate.class].get[];
            Supplier querySupplier = container.select[QuerySupplier.class].get[];
            template.delete[delete[].from["Car"].build[]];
            final List queries = querySupplier.get[];
            queries.forEach[template::query];

            final List cars = template.query["select * from Car order by provider asc"];
            System.out.println[cars.size[]];


        }
    }

    private App[] {
    }
}

Tại Jakarta NoSQL, có một giao diện đại diện cho việc phân trang. Có giao diện 


    4.0.0
    Artemis Demo using Java SE MongoDB with pagiantion
    org.jnosql.artemis
    pagination
    0.1.0-SNAPSHOT

    
        UTF-8
    

    
        
            org.jnosql.artemis
            artemis-document
            ${project.version}
        
        
            org.jnosql.diana
            mongodb-driver
            ${project.version}
        
        
            org.jboss.weld.se
            weld-se-shaded
            ${weld.se.core.version}
        
        
            org.eclipse
            yasson
            ${json.b.version}
        
    

    
        
            oss.sonatype.org-snapshot
            //oss.sonatype.org/content/repositories/snapshots
            
                false
            
            
                true
            
        
    
2

Pagination pagination = Pagination.page[1].size[2];
//it creates a pagination instance where it is the first page and each page has the size of two each one.
long pageNumber = pagination.getPageNumber[];
Pagination next = pagination.next[];

Mỗi API NoSQL có một chuyên môn hóa của truy vấn trong đó nó cho phép phân trang, chẳng hạn như 


    4.0.0
    Artemis Demo using Java SE MongoDB with pagiantion
    org.jnosql.artemis
    pagination
    0.1.0-SNAPSHOT

    
        UTF-8
    

    
        
            org.jnosql.artemis
            artemis-document
            ${project.version}
        
        
            org.jnosql.diana
            mongodb-driver
            ${project.version}
        
        
            org.jboss.weld.se
            weld-se-shaded
            ${weld.se.core.version}
        
        
            org.eclipse
            yasson
            ${json.b.version}
        
    

    
        
            oss.sonatype.org-snapshot
            //oss.sonatype.org/content/repositories/snapshots
            
                false
            
            
                true
            
        
    
3   và 

    4.0.0
    Artemis Demo using Java SE MongoDB with pagiantion
    org.jnosql.artemis
    pagination
    0.1.0-SNAPSHOT

    
        UTF-8
    

    
        
            org.jnosql.artemis
            artemis-document
            ${project.version}
        
        
            org.jnosql.diana
            mongodb-driver
            ${project.version}
        
        
            org.jboss.weld.se
            weld-se-shaded
            ${weld.se.core.version}
        
        
            org.eclipse
            yasson
            ${json.b.version}
        
    

    
        
            oss.sonatype.org-snapshot
            //oss.sonatype.org/content/repositories/snapshots
            
                false
            
            
                true
            
        
    
4. Do đó, nhà phát triển Java có thể xác định số lượng giá trị trả về cho mỗi yêu cầu.

import jakarta.nosql.document.DocumentQuery;
import jakarta.nosql.mapping.Page;
import jakarta.nosql.mapping.Pagination;
import jakarta.nosql.mapping.document.DocumentQueryPagination;
import jakarta.nosql.mapping.document.DocumentTemplate;

import javax.enterprise.inject.se.SeContainer;
import javax.enterprise.inject.se.SeContainerInitializer;
import java.util.List;
import java.util.function.Supplier;

import static jakarta.nosql.document.DocumentDeleteQuery.delete;

public class App2 {


    public static void main[String[] args] {

        try [SeContainer container = SeContainerInitializer.newInstance[].initialize[]] {

            DocumentTemplate template = container.select[DocumentTemplate.class].get[];
            Supplier querySupplier = container.select[QuerySupplier.class].get[];
            template.delete[delete[].from["Car"].build[]];
            final List queries = querySupplier.get[];
            queries.forEach[template::query];

            DocumentQuery query = DocumentQuery.select[].from["Car"].orderBy["provider"].asc[].build[];
            Pagination pagination = Pagination.page[1].size[2];
            DocumentQueryPagination queryPagination = DocumentQueryPagination.of[query, pagination];

            final Page page = template.select[queryPagination];
            List cars = page.getContent[];
            System.out.println[cars.size[]];
            final Page nextPage = page.next[];
            cars = nextPage.getContent[];
            System.out.println[cars.size[]];
        }
    }

    private App2[] {
    }
}

Kết quả là một phiên bản Trang có phương thức trả về trang tiếp theo và do đó, các nội dung sau. Giao diện kho lưu trữ cũng có hỗ trợ trả về giá trị dưới dạng phiên bản Trang

import jakarta.nosql.mapping.Page;
import jakarta.nosql.mapping.Pagination;
import jakarta.nosql.mapping.Repository;

import java.util.List;

public interface CarRepository extends Repository {

    List findByOrderByProvider[Pagination pagination];

    Page findAll[Pagination pagination];
}


import jakarta.nosql.mapping.Page;
import jakarta.nosql.mapping.Pagination;
import jakarta.nosql.mapping.document.DocumentTemplate;

import javax.enterprise.inject.se.SeContainer;
import javax.enterprise.inject.se.SeContainerInitializer;
import java.util.List;
import java.util.function.Supplier;

import static jakarta.nosql.document.DocumentDeleteQuery.delete;

public class App3 {


    public static void main[String[] args] {

        try [SeContainer container = SeContainerInitializer.newInstance[].initialize[]] {

            DocumentTemplate template = container.select[DocumentTemplate.class].get[];
            CarRepository repository = container.select[CarRepository.class].get[];
            Supplier querySupplier = container.select[QuerySupplier.class].get[];
            template.delete[delete[].from["Car"].build[]];
            final List queries = querySupplier.get[];
            queries.forEach[template::query];

            Pagination pagination = Pagination.page[1].size[2];
            final Page page = repository.findAll[pagination];
            List cars = page.getContent[];
            System.out.println[cars.size[]];
            final Page nextPage = page.next[];
            cars = nextPage.getContent[];
            System.out.println[cars.size[]];
        }
    }

    private App3[] {
    }
}

Một điều quan trọng là nhà phát triển có thể kết hợp phân trang và Bộ sưu tập và kết quả sẽ truy vấn bằng cách sử dụng phân trang đó

import jakarta.nosql.mapping.Pagination;
import jakarta.nosql.mapping.document.DocumentTemplate;

import javax.enterprise.inject.se.SeContainer;
import javax.enterprise.inject.se.SeContainerInitializer;
import java.util.List;
import java.util.function.Supplier;

import static jakarta.nosql.document.DocumentDeleteQuery.delete;

public class App4 {


    public static void main[String[] args] {

        try [SeContainer container = SeContainerInitializer.newInstance[].initialize[]] {

            DocumentTemplate template = container.select[DocumentTemplate.class].get[];
            CarRepository repository = container.select[CarRepository.class].get[];
            Supplier querySupplier = container.select[QuerySupplier.class].get[];
            template.delete[delete[].from["Car"].build[]];
            final List queries = querySupplier.get[];
            queries.forEach[template::query];

            Pagination pagination = Pagination.page[1].size[2];
            final List cars = repository.findByOrderByProvider[pagination];
            System.out.println[cars.size[]];
        }
    }
    private App4[] {
    }
}

Trong bài đăng này, chúng tôi đã giới thiệu khái niệm phân trang và giải thích lý do tại sao nó lại quan trọng đối với cơ sở dữ liệu NoSQL khi nhà phát triển nói về hiệu suất. Jakarta NoSQL có hỗ trợ phân trang với API thông thạo và chúng ta có thể thấy điều này với một ứng dụng demo nhỏ

Mục đích của phân trang là gì?

Phân trang là gì? . Người dùng có thể điều hướng giữa các trang này bằng cách nhấp vào liên kết, thường ở dạng số nằm ở cuối trang. Nội dung được phân trang thường liên quan đến một số chủ đề hoặc mục đích chung

Phân trang SQL là gì?

Phân trang là nhiệm vụ chia tập dữ liệu thành các phần tiếp theo của toàn bộ tập dữ liệu . Ví dụ: một công cụ tìm kiếm ban đầu chỉ hiển thị 15 kết quả đầu tiên cho một truy vấn tìm kiếm. Sau đó, người dùng có thể duyệt qua phần còn lại của kết quả bằng cách nhấp vào nút “Tiếp theo”.

Phân trang hoạt động như thế nào trong cơ sở dữ liệu?

Phân trang là chức năng quản lý bộ nhớ trong đó máy tính sẽ lưu trữ và truy xuất dữ liệu từ bộ nhớ thứ cấp của thiết bị sang bộ nhớ chính . Quản lý bộ nhớ là một khía cạnh quan trọng của bất kỳ thiết bị máy tính nào và đặc biệt phân trang rất quan trọng đối với việc triển khai bộ nhớ ảo.

Phân trang trong MySQL là gì?

Phân trang là quá trình chia nhỏ một tập bản ghi lớn thành nhiều trang có thể quản lý . Trong MySQL, bạn có thể triển khai phân trang bằng cách chỉ xem một số hàng cụ thể trong mỗi đầu ra truy vấn. Bạn có thể đạt được điều này bằng cách sử dụng mệnh đề LIMIT.

Chủ Đề