繁体   English   中英

如何改进我在 C++ 中实现 DBMS 查询的代码?

[英]How can improve my code on implementation of DBMS queries in c++?

作为课程学习活动的一部分,我被要求在(基于)c++ 中实现 DBMS 查询。 示例 C++ 代码是:-

         class Customer
         {
         public:
             string c_id,name,gender;
             int age,phno;
             friend void ticket_book(ifstream&ib1, ifstream &ib2);
         };

         class Ticket
         {
         public:
             string ticket_no,t_origin,t_dest,j_date;
             int berth,amount;
             string status,aadhar_id,bus_no;
             float t_dept,t_arrival;
             friend void ticket_book(ifstream&ib1, ifstream &ib2);
         };

         void ticket_book(ifstream&ib1, ifstream &ib2, Customer hh[], Ticket ee[])
        {
            int flag;
            for(int i=0; i<13;i++)
        {
        ib1 >> hh[i].c_id >> hh[i].name >> hh[i].gender >> hh[i].age >> hh[i].phno;
        }
        for(int i=0; i<14;i++)
        {
            ib2 >> ee[i].ticket_no >> ee[i].t_origin >> ee[i].t_dest >> ee[i].j_date >> ee[i].berth >> ee[i].amount >> ee[i].status >> ee[i].t_dept >> ee[i].t_arrival >> ee[i].aadhar_id >> ee[i].bus_no;
        }
        for(int i=0;i<13;i++)
        {
            flag=0;
            for (int j=0;j<14;j++)
            {
            if (hh[i].c_id==ee[j].aadhar_id)
            {
                flag=1;
            }
            }
            if (flag==0)
            {
            cout << hh[i].c_id <<"\t" << hh[i].name <<"\t" << hh[i].gender << "\t"<<hh[i].age<<"\t"<<hh[i].phno<< endl;
            }
        }

 main()
{
    Customer hh[13];
    Ticket ee[14];
    ifstream ib1("C://Users//xyz//Desktop//customer.txt");
    ifstream ib2("C://Users//xyz//Desktop//ticket.txt");
    cout<<"Retrieve the customer details who has not booked any ticket\n"<<endl;
            ticket_book(ib1,ib2,hh,ee);
            ib1.close();
            ib2.close();
}

以上代码用于检索未预订任何机票的客户的详细信息。 同样,我必须使用 C++ 概念基于我的数据库实现 20 多个查询。 我使用了对象数组来存储表的每个元组。 每个表格内容都存储在文本文件中。 现在我已经实现了 10 个查询,它已经超过了 500 行代码 Microsoft Visual Studio IDE。 当我构建项目时,它需要一分钟多的时间,甚至执行速度也会很慢,因为当我以上述方式实现时,查询数量会增加。

那么请帮助我如何改进我的代码以实现上述场景,以便在内存、时间等所有方面都高效。 在 C++ 中实现 DBMS 查询的更好方法是什么? 帮帮我。 欢迎提出建议和编辑。 提前致谢。

您可以通过一次请求将更多数据读入内存来加速程序。 例如,不是将一个变量读入内存,然后下一个,而是将所有文件读入内存,然后从内存中访问。

另一种选择是使用内存映射文件。 这取决于操作系统,并非所有操作系统都支持此功能。

常见瓶颈(按顺序):

  • I/O(数据传输)
  • 数据格式(从文本表示转换为内部表示,反之亦然)
  • 除法和模数
  • 分枝
  • 加载数据缓存。

通常,通过改进 I/O 比通过改进数据缓存可以获得更高的性能。 但是,这取决于数据量和数据访问量。

解决问题的另一种方法是通过linklist

可以轻松执行插入和删除操作,从而减少了代码的大小。

这是您可以参考的示例代码。

template<class T>
class LinkedList
{
 public:
  node<T> *head;
 public:
   LinkedList(){
    head=new node<T>;
    head->llink=head;head->rlink=head;
}
void insertRear(T str){
    node<T> *nxt,*temp;
    temp=new node<T>;
    nxt=this->head->rlink;
    temp->a=str;
    nxt->llink=temp;
    this->head->rlink=temp;
    temp->llink=this->head;
    temp->rlink=nxt;
}

 void deletePos(T str){
    node<T> *i,*nxt,*before;
    for(i=head->llink;i!=head;i=i->llink){
        if(str==i->a) goto del;
    }
    del:
    nxt=i->rlink;
    before=i->llink;

    nxt->llink=before;
    before->rlink=nxt;
    delete i;
  }
};

class Cust
{
 private:
string c_id;
string name;

public:
Cust(){}
Cust(string a,string b){
    c_id=a;
    name=b;
}
friend ostream& operator<<(ostream &out,Cust &c){} 
friend istream& operator>>(istream &in,Cust &c){}
};

int main() {
    LinkedList<Emp> ll;
    Emp c,c1;
    ifstream fin("Emp.txt");
    while(!fin.eof()){
        fin>>c;
        ll.insertRear(c);
    }
    ll.deleteRear();
    fin.close();
    ll.disp();
    return 0;
}

而不是使用数组,指针索引将使代码运行得更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM