Change hashtag trends to be stored in the database instead of redis (#32837)
Co-authored-by: David Roetzel <david@roetzel.de>
This commit is contained in:
parent
b9b26490e7
commit
48ea7552dd
18 changed files with 195 additions and 157 deletions
15
db/migrate/20241111141355_create_tag_trends.rb
Normal file
15
db/migrate/20241111141355_create_tag_trends.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateTagTrends < ActiveRecord::Migration[7.2]
|
||||
def change
|
||||
create_table :tag_trends do |t| # rubocop:disable Rails/CreateTableWithTimestamps
|
||||
t.references :tag, null: false, foreign_key: { on_delete: :cascade }, index: false
|
||||
t.float :score, null: false, default: 0
|
||||
t.integer :rank, null: false, default: 0
|
||||
t.boolean :allowed, null: false, default: false
|
||||
t.string :language, null: false, default: ''
|
||||
end
|
||||
|
||||
add_index :tag_trends, [:tag_id, :language], unique: true
|
||||
end
|
||||
end
|
25
db/post_migrate/20241123160722_move_tag_trends_to_table.rb
Normal file
25
db/post_migrate/20241123160722_move_tag_trends_to_table.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MoveTagTrendsToTable < ActiveRecord::Migration[7.2]
|
||||
include Redisable
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
redis.zrange('trending_tags:all', 0, -1, with_scores: true).each do |(tag_id, score)|
|
||||
TagTrend.create(
|
||||
tag_id: tag_id,
|
||||
score: score,
|
||||
allowed: redis.zscore('trending_tags:allowed', tag_id).present?
|
||||
)
|
||||
end
|
||||
|
||||
TagTrend.recalculate_ordered_rank
|
||||
|
||||
redis.del('trending_tags:allowed', 'trending_tags:all')
|
||||
end
|
||||
|
||||
def down
|
||||
raise ActiveRecord::IrreversibleMigration
|
||||
end
|
||||
end
|
12
db/schema.rb
12
db/schema.rb
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.2].define(version: 2024_11_04_082851) do
|
||||
ActiveRecord::Schema[7.2].define(version: 2024_11_23_160722) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
||||
|
@ -1080,6 +1080,15 @@ ActiveRecord::Schema[7.2].define(version: 2024_11_04_082851) do
|
|||
t.index ["tag_id"], name: "index_tag_follows_on_tag_id"
|
||||
end
|
||||
|
||||
create_table "tag_trends", force: :cascade do |t|
|
||||
t.bigint "tag_id", null: false
|
||||
t.float "score", default: 0.0, null: false
|
||||
t.integer "rank", default: 0, null: false
|
||||
t.boolean "allowed", default: false, null: false
|
||||
t.string "language"
|
||||
t.index ["tag_id", "language"], name: "index_tag_trends_on_tag_id_and_language", unique: true
|
||||
end
|
||||
|
||||
create_table "tags", force: :cascade do |t|
|
||||
t.string "name", default: "", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
|
@ -1343,6 +1352,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_11_04_082851) do
|
|||
add_foreign_key "statuses_tags", "tags", name: "fk_3081861e21", on_delete: :cascade
|
||||
add_foreign_key "tag_follows", "accounts", on_delete: :cascade
|
||||
add_foreign_key "tag_follows", "tags", on_delete: :cascade
|
||||
add_foreign_key "tag_trends", "tags", on_delete: :cascade
|
||||
add_foreign_key "tombstones", "accounts", on_delete: :cascade
|
||||
add_foreign_key "user_invite_requests", "users", on_delete: :cascade
|
||||
add_foreign_key "users", "accounts", name: "fk_50500f500d", on_delete: :cascade
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue