質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

3回答

2111閲覧

重複データがないようにDBでデータ管理する方法について

satta_m

総合スコア20

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/06/20 03:04

###前提・実現したいこと
RSSデータを定期的に取得して、最終的に1日単位でRSSで配信されたデータの一覧を取得したいと考えてます。
たとえば、15分単位などで取得すると、データが更新されていなくて、重複データが出ると思います。
その重複データがないようにDBで管理したいと考えています。

Ruby on Railsを使用するつもりです。
SQLの操作はActiveRecordを使って実施して、DBはSqlite3を使うつもりです。

###質問内容

色々方法はあると思いますが、どのような方法があるのでしょうか。
また、どの方法が適しているのでしょうか。

自分で思いついた方法は以下です。
[その1]

  1. RSSデータ取得
  2. すでにデータがある場合→既存の重複レコードを削除して、挿入

もしくは
既存の重複レコードをアップデート
※ これもDELETE→INSERTのほうがいいのか、UPDATEのほうがいいのか
どちらか適しているのか・・・・

[その2]

  1. RSSデータ取得
  2. とにかくすべてのデータを挿入
  3. 検索時に最新のuniqueなものを取得

初心者のようなような質問で恐縮ですが、「このサイトが参考になる」や「この本を見て勉強しろ!」とか
「この方法がいいと思う」など、ご助言いただけると幸いです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

RSSの仕様で各記事の作成日時ではなくRSS自体の最終更新日時があるはずですので、まずはこれをチェックするのが良いと思います

投稿2016/06/20 03:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satta_m

2016/06/21 00:55

最終更新日時を基準に、取得するかしないかで処理を減らすことも出来ますね。 参考になります。ありがとうございます。
guest

0

ベストアンサー

15分ごとなど一定の間隔で取得するのであれば、

  1. 前回の取得時刻以降に更新されたもののみを取得する(=15分間隔であれば15分以内に更新されたデータがなければスキップする)
  2. 15分以内に更新されたデータがあれば取得して重複レコード(※)がなければデータを作成する

※ 「重複レコードかどうか」についてはRSSで配信されているデータに記事のIDなどなにかしら一意なものがあれば、それを保存しておいて重複をチェックするというのがよいのではないでしょうか。

ご質問される際に実際のRSSデータの内容や構造を添えていただけると、みなさんより具体的な回答ができるかと思います

投稿2016/06/20 04:57

obi_yuta

総合スコア121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satta_m

2016/06/21 00:59

ご回答、およびご指摘、ありがとうございます。 ここに書くのが適切かどうか定かではないですが、今回やりたかったのはhatenaブックマークのRSSを基準にして、一日単位でその一覧を出したいなーと考えていての質問でした。 まぁ探せばそういうサービスなりページなりはあると思うのですが自分でまとめてみたいなと思っての取り組みです。w 重複レコードの考え方について、ご指南いただきありがとうございました。
guest

0

重複レコードがあれば、スキップすればよいのでは?

投稿2016/06/20 03:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satta_m

2016/06/21 00:54

連絡が遅くなってしまいすみません。 重複レコードがあったら、最新のものを保持するべきと思いこんでいましたが、一覧とるだけだったら確かにスキップしても問題ないですね・・・・。 目からうろこのご意見でした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問