用于存储mysql列的mongodb架构设计,如数组值查询

时间:2013-02-14 11:34:16

标签: mysql mongodb database-design database-migration

我的mysql数据库看起来像这样:

    ----|-----------|--------|------------|---------|----------|---------|----------|----------|
   _id| Segment_ID| Origin | Destination| Aircraft| Latitude1|Latitude2|Longitude1|Longitude2|
    ----|-----------|--------|------------|---------|----------|---------|----------|----------|
     1  | LFAQ-GILTO| LFAQ   | KURIS      | A3ST    | 49.56    | 2.5     | 49.97    | 2.33     |
    ----|-----------|--------|------------|---------|----------|---------|----------|----------|
   1    |GILTO-EVX  | LFAQ   | KURIS      | A3ST    | 49.97    | 2.33    | 50.70    | 2.12     |
    ----|-----------|--------|------------|---------|----------|---------|----------|----------|
    1   |EVX-KURIS  | LFAQ   | KURIS      | A3ST    | 50.70    | 2.12    | 52.00    | 2.07     |
    ----|-----------|--------|------------|---------|----------|---------|----------|----------|

我想将我的数据库从mysql迁移到mongodb。我使用mongify在mongodb中的嵌入式集合中迁移我的数据库。我没有遇到任何问题。但是,我想做下一个: 1.迁移到mongodb中的嵌入式集合,并将列作为数组值。 2.我希望我的mongodb系列看起来像这样

Flight: { 
  id:1 {
  "Segment_ID": "LFAQ-GILTO, GILTO-EVX, EVX-KURIS",
  "Origin": "LFAQ, LFAQ, LFAQ",  
  "Destination": "KURIS, KURIS, KURIS",
  "Aircraft" : "A3ST, A3ST, A3ST",
  "Latitude1" : "49.56, 49.97, 50.70",
etc.....

有什么方法可以让它发挥作用吗?

现在我的数据库看起来像:

Flight: {
id1: {
"0": {
"Segment_ID": "LFAQ-GILTO",
"Origin": "LFAQ",
"Destination": KURIS",
"Aircraft" : "A3ST",
"LAtitude1": "49.56",
.......
},
"1": {
"Segment_ID": "LFAQ-GILTO",
"Origin": "LFAQ",
"Destination": KURIS",
"Aircraft" : "A3ST",
"LAtitude1": "49.56",
.....
},
"2": {
"Segment_ID": "LFAQ-GILTO",
"Origin": "LFAQ",
"Destination": KURIS",
"Aircraft" : "A3ST",
"LAtitude1": "49.56",
.....},
......

1 个答案:

答案 0 :(得分:1)

与MySql相比,您的MongoDB结构很好看。但是如果你保留这样的信息,就必须循环读取数据。如果数据大小变大,此循环将减慢您的应用程序。

例如, 您需要“Segment_ID”为“GILTO-EVX”的行,在MongoDB中,您有针对“Segment_ID”数组的循环数据。因为MongoDB返回父键及其所有值,即使单个值与您的条件匹配。在上面的例子中,MongoDB会给你

{ "Segment_ID": ["LFAQ-GILTO", "GILTO-EVX", "EVX-KURIS", ....] } //If you are keep values in array
{ "Segment_ID": "LFAQ-GILTO, GILTO-EVX, EVX-KURIS, ....." } //If you are keep values as string with comma seperated

两者都难以使用进一步的过程。我的意思是你必须在变量中保留更大的数组或更大的字符串。在读取与“Segment_ID = GILTO-EVX”相对应的其他键(列)上的相应信息时,此复合体将增加。 在这里,我的建议是重构您的MongoDB文档,如下所示,

//Doc 1
{ 
  "Flight_id" : 1,
  "Segment_ID": "LFAQ-GILTO",
  "Origin": "LFAQ",  
  "Destination": "KURIS",
  "Aircraft" : "A3ST",
}
//Doc 2
{ 
  "Flight_id" : 1,
  "Segment_ID": "GILTO-EVX",
  "Origin": "LFAQ",  
  "Destination": "KURIS",
  "Aircraft" : "A3ST",
}
//Doc3 and more...