Node.js图片库的数据库解决方案

时间:2017-12-26 11:35:36

标签: mysql node.js database mongodb image-gallery

我正在使用Node.js开发一个基于网络的个人飞机照片库,向朋友/同事/等展示我的照片。服务器最多可托管数百或1-2千张这些照片(作为静态文件),而其附带的数据将存储在数据库中。

网站不应产生过多流量(一次只能访问1-2次)。其主要功能是复杂的搜索"引擎"能够过滤和订购飞机制造商,飞机类型,飞机注册,航空公司,拍摄照片的机场,照片日期以及其他许多照片。方面。

我开发了一个关系模型来实现这些目标,并在MySQL数据库中实现:

                               +-------+
                               | Photo |
                               +-------+
                              N |     | N
               +----------------+     +--------------+
             1 |                                     | 1
  +------------------------+            +--------------------------+
  |Aircraft | e.g. "G-CIVL"|            | Airport | e.g. "Heathrow"|
  +------------------------+            +--------------------------+
             N |                                     | N
             1 |                                     | 1
   +-----------------------+              +-----------------------+
   | Model | e.g. "747-400"|              |  City | e.g. "London" |
   +-----------------------+              +-----------------------+
             N |                                     | N
             1 |                                     | 1
 +-------------------------+         +--------------------------------+
 |Model_family | e.g. "747"|         | Country | e.g. "United Kingdom"|
 +-------------------------+         +--------------------------------+
             N |
             1 |
+----------------------------+
|Manufacturer | e.g. "Boeing"|
+----------------------------+

每张照片条目都会包含有关拍摄地点的信息(机场 - 城市 - 国家"分支")以及照片中显示的飞机(飞机 - 型号 - 型号_家庭 - 制造商"分支"。)

正如我之前提到的,访问者应该能够按照这些表的任何列过滤照片,在数据库查询中需要不同的连接以用于不同的过滤选项。例子:

  1. 用户正在查找在某个国家/地区拍摄的照片。 SELECT 查询返回相应的图像数据应该加入Photo, 机场,城市和国家表。
  2. 用户正在过滤某架飞机的照片 模型。 SELECT查询必须加入Photo和Model 仅限表格。
  3. 如果用户同时按多个(甚至更多)方面过滤照片,问题会更加复杂。

    因此,需要一个复杂的应用程序级SQL查询构建算法,这将考虑上述表结构。

    我的问题是:

    • 上述方法(复杂的SQL字符串构建算法)是解决问题的好方法吗?

    • 或者,无论用户的过滤选项如何,我都应该将所有表格加在一起? (似乎是更好的代码可维护性的严重性能权衡)

    • 或者像MongoDB这样的NoSQL解决方案会更平坦(和非规范化) 模型更适合这项任务?不必设置不同的 加入不同的过滤选项似乎是一个巨大的优势。存储的数据不太可能被更新或删除,因此非规范化可能不是一个严重的问题。

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我没有使用MYSQL那么多但是在NoSQL(Mongodb

你可以得到类似这样的数据结构,你可以根据每个参数进行搜索

[
  {
    "_id": 0,
    "Airport": "Heathrow",
    "city": "London",
    "country": "United Kingdom",
    "Aircraft": "G-CIVL",
    "model": "747-400",
    "model_family": "747",
    "manufacturer": "Boeing",
    "photo_url": "http://www.dummy-url/dakshdajk8sdjkhs8ds8dh8sd8sdj8s.png"
  },
  {
    "_id": 1,
    "Airport": "Heathrow",
    "city": "London",
    "country": "United Kingdom",
    "Aircraft": "G-CIVL",
    "model": "747-400",
    "model_family": "747",
    "manufacturer": "Boeing",
    "photo_url": "http://www.dummy-url/dakshdajk8sdjkhs8ds8dh8sd8sdj8s.png"
  }
]