代码之家  ›  专栏  ›  技术社区  ›  Eric Z Beard

您是否将索引置于源代码管理中?

  •  3
  • Eric Z Beard  · 技术社区  · 16 年前

    如何使它们在测试环境和生产环境之间保持同步?

    因此,我尽最大努力在所有环境之间保持索引同步,但老实说,我在自动化方面做得不是很好。这是一种随意的,手工的过程。

    我定期查看索引统计信息并删除不必要的索引。我通常通过创建一个delete脚本来完成这项工作,然后将其复制回其他环境。

    但是这里和那里的索引是在正常过程之外创建和删除的,很难看出它们之间的区别。

    我发现一个真正有用的方法是使用简单的数字索引名,比如

    idx_t_01
    idx_t_02
    

    idx_c1_c2_c5_c9_c3_c11_5
    

    很难区分这样的索引。

    9 回复  |  直到 16 年前
        1
  •  11
  •   MarkR    16 年前

    索引是数据库模式的一部分,因此应该与其他所有内容一起受源代码控制。任何人都不应该在没有经过正常的QA和发布过程(特别是性能测试)的情况下到处创建生产索引。

    有很多关于模式版本控制的其他线程。

        2
  •  6
  •   Adam Bellaire    16 年前

    重新安装时,请执行以下操作: -查看产品的X版。 -从签出的“数据库”目录中,运行数据库脚本以创建数据库。 -使用签出的代码库与数据库交互。

    使用这种方法,您永远不会遇到代码库数据库同步问题。

        3
  •  5
  •   Matt Rogish    16 年前

    对, DML或DDL的更改是通过脚本编写的,并签入到源代码管理中,主要是通过rails中的activerecord迁移。我讨厌不断地吹响rails的号角,但是在构建基于DB的系统的许多年中,我发现迁移路径比我使用或构建的任何国产系统都要好得多。

    不要给它们加前缀 ,这很傻(因为您在sysobjects或任何数据库中都有类型元数据),但我确实包含表名和列,例如table name_col1_col2。

    这样,如果我浏览sysobjects,我可以很容易地看到特定表的索引(这也是习惯的力量,wayyyy在我使用的一些DB m s上,索引名称在整个DB中是唯一的,所以确保这一点的唯一方法是使用唯一的名称)。

        4
  •  1
  •   joev    16 年前

    我已经做了很长一段时间的Java程序员了,但是最近我被介绍到一个系统,这个系统的一部分使用Ruby on Rails进行数据库访问。关于RoR,我喜欢的一点是“迁移”的概念。基本上,你有一个目录,里面的文件看起来像001_add_foo_table.rb,002_add_bar_table.rb,003_add_blah_column_to_foo.rb等等。这些Ruby源文件扩展了一个父类,重写了名为“up”和“down”的方法。“up”方法包含需要进行的一组数据库更改,以便将数据库架构的早期版本转换为当前版本。类似地,“down”方法将更改还原回以前的版本。当您想为特定版本设置架构时,Rails迁移脚本会检查数据库以查看当前版本,然后查找从该版本向上(或向下)到所需修订版本的.rb文件。

    为了使这成为你开发过程的一部分,你可以将这些检查到源代码管理中,然后根据口味调整。

    在这里,Rails没有什么特别的,只是我第一次看到这种技术被广泛使用。您也可以使用成对的SQL DDL文件,比如001_UP_add_foo_table.SQL和001_DOWN_remove_foo_table.SQL。剩下的只是shell脚本的一个小问题,这是留给读者的练习。

        5
  •  0
  •   Taptronic    16 年前

    我总是使用源代码管理SQL(DDL、DML等)。它的代码和其他代码一样。它的良好实践。

        6
  •  0
  •   Tundey    16 年前

    我不确定不同环境中的索引是否应该相同,因为它们有不同的数据大小。除非测试环境和生产环境具有相同的精确数据,否则索引将不同。

        7
  •  0
  •   Georgi    16 年前

    我不将索引放在源代码管理中,而是放在索引的创建脚本中。;-)

    • IX_CUSTOMER_NAME用于表“CUSTOMER”中的“NAME”字段
    • 主键的PK_CUSTOMER_ID,
    • UI_CUSTOMER_GUID,用于唯一的客户的GUID字段(因此是“UI”-唯一索引)。
        8
  •  0
  •   Paul Tomblin    16 年前

    在我当前的项目中,我在源代码管理中有两件事:一个是空数据库的完全转储(使用pg_dump-c,这样它就有了创建表和索引所需的所有ddl),另一个是确定数据库版本的脚本,并应用alters/drops/adds将其升级到当前版本。前者在我们安装新站点时运行,也在QA开始新一轮测试时运行,后者在每次升级时运行。当您更改数据库时,需要更新这两个文件。

        9
  •  0
  •   Daniel Honig    16 年前

    使用grails应用程序,默认情况下索引存储在源代码管理中,因为您是在表示域对象的文件中定义索引定义的。只是提供“Grails”视角作为参考。