【问题标题】:mongodb schema design for storing mysql column like array value query用于存储mysql列的mongodb模式设计,如数组值查询
【发布时间】:2013-01-30 04:49:09
【问题描述】:

我的 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",
.....},
......

【问题讨论】:

  • 现在 Mongo 中的数据是什么样的?你试过什么?转换为您想要的结构看起来非常简单,尽管看起来您的文档中可能有无限量的数据。文档限制为 16MB。
  • 您为什么希望您的数据看起来像这样?解析和使用看起来很糟糕......
  • 使用这个数据库的同事问我是否可以这样设计,他们认为这样会更快
  • @WiredPrairie 你能告诉我一个用于构建表格的查询示例吗,我想出了如何导出数据并使用 php 将其直接导入 mongo,但我无法将代码写入构建表格

标签: mysql mongodb database-design database-migration


【解决方案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...

【讨论】:

  • 如果他们不是程序员,请告诉他们谢谢,但不,谢谢。还记得如果 9 位女性在 9 个月内生 9 个孩子,从统计上平均需要 1 个月才能生一个孩子吗?
  • 好吧,我接受。 MongoDB 服务器是做较少的搜索来定位您的数据。但是一旦你从 MongoDB 得到结果,你的 web 应用程序就会付出努力,这些努力会降低你的应用程序性能,有时它也会导致应用程序崩溃。更好的选择将这些努力推向 MongoDB。因此,您的应用可以忙于传递信息,而不是生成这些信息。
  • 好的,谢谢您的建议 :) 我才开始使用 mongodb 一周,所以我真的不知道选择哪种架构设计可以使查询更快地工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2017-05-02
  • 2012-01-14
  • 1970-01-01
相关资源
最近更新 更多